在 Perl 6 中将正则表达式作为参数传递
Passing regexes as arguments in Perl 6
的延续,而且可能更奇怪。
我可以吗?使用 sub
连接两个 regexes
?
(我当然明白,怎么用一个regex
)
下面的代码是完全错误的,但我希望它能解释我想做的事情:
my Regex sub s12 ( $c, $v) {
return / <{$c}> <{$v}> /
}
my regex consonant { <[a .. z] -[aeiou]> }
my regex vowel { <[aeiou]> }
my regex open_syllable { &s12( &consonant, &vowel ) }
"bac" ~~ m:g/ <open_syllable> /;
say $/; # should be 'ba'
你写的基本上是对的,但你需要稍微调整一下语法。首先,您应该像任何其他 sub 一样声明您的组合函数。接下来,似乎将正则表达式插入另一个正则表达式,<$r>
是正确的语法,将函数调用插入正则表达式,<{my-sub(args)}>
是正确的语法。 (调用它时不需要在 sub 前加一个 & 符号——&
主要用于当你想在不调用它的情况下引用 Callable
时。)结合这些小修复和你的代码工作:
sub combine(Regex $a, Regex $b --> Regex) {
/ <$a> <$b> /
}
my regex consonant { <[a .. z] -[aeiou]> }
my regex vowel { <[aeiou]> }
my regex open_syllable { <{combine(&consonant, &vowel)}> }
"bac" ~~ m:g/ <open_syllable> /;
say ~$/; # output: ba
我可以吗?使用 sub
连接两个 regexes
?
(我当然明白,怎么用一个regex
)
下面的代码是完全错误的,但我希望它能解释我想做的事情:
my Regex sub s12 ( $c, $v) {
return / <{$c}> <{$v}> /
}
my regex consonant { <[a .. z] -[aeiou]> }
my regex vowel { <[aeiou]> }
my regex open_syllable { &s12( &consonant, &vowel ) }
"bac" ~~ m:g/ <open_syllable> /;
say $/; # should be 'ba'
你写的基本上是对的,但你需要稍微调整一下语法。首先,您应该像任何其他 sub 一样声明您的组合函数。接下来,似乎将正则表达式插入另一个正则表达式,<$r>
是正确的语法,将函数调用插入正则表达式,<{my-sub(args)}>
是正确的语法。 (调用它时不需要在 sub 前加一个 & 符号——&
主要用于当你想在不调用它的情况下引用 Callable
时。)结合这些小修复和你的代码工作:
sub combine(Regex $a, Regex $b --> Regex) {
/ <$a> <$b> /
}
my regex consonant { <[a .. z] -[aeiou]> }
my regex vowel { <[aeiou]> }
my regex open_syllable { <{combine(&consonant, &vowel)}> }
"bac" ~~ m:g/ <open_syllable> /;
say ~$/; # output: ba