Я могу написать что-то вроде этого (elem
здесь есть XML::Element
, но это не имеет большого значения):
for $elem.nodes {
when XML::Element { ... }
when XML::Text { ... }
...
default { note qq{Ignoring unknown XML node "$_".} }
}
который выглядит красиво, но не дает мне удобочитаемого имени для $_
внутри кода, использующего его, поэтому я бы предпочел написать это:
for $elem.nodes -> $child {
when XML::Element { ... }
when XML::Text { ... }
...
default { note qq{Ignoring unknown XML node "$child".} }
}
но это не работает, потому что теперь $_
не установлено, и поэтому мне действительно нужно написать
for $elem.nodes -> $child {
given $child {
when XML::Element { ... }
when XML::Text { ... }
...
default { note qq{Ignoring unknown XML node "$child".} }
}
}
что немного избыточно и добавляет дополнительный уровень отступа.
Это определенно не конец света, но я упустил какой-то простой способ иметь читаемое имя переменной и избежать given
?
Вы можете привязать переменную над операторами when
, это немного уродливее, но работает.
for $elem.nodes {
my $child = $_;
when XML::Element { say 'I am XML!' }
when XML::Text { say 'I am text!' }
default { say "I am default: $child" }
}
Редактировать: в Раку я думаю, что вполне разумно придерживаться использования $_
, поскольку идея $_
существует уже довольно давно.
это должно быть $child := $_;
?
@ p6steve может быть, но в данном случае это не должно иметь значения.
Спасибо, я думаю, это действительно самый разумный ответ, я просто надеялся, что может быть какой-то волшебный способ привязать как $child
, так и $_
к значению цикла одновременно, каким-то образом, но если его нет, это самый ясный и краткий способ делать то, что я хочу.
for @a -> $x { {
when 2 { say "$x ... a" }
when 4 { say "$x ... b" }
} given $x }
непослушные двойные кудри и пост-данный?
Моя единственная защита от этого бессовестного использования двойных завитков — это код стиля JavaScript thing(function() { ... });
.
Спасибо за идею, приятно знать, что это работает, но я бы не хотел защищать это в код-ревью...
Я мечтаю о "прощенном"... кто знает, может быть когда-нибудь...