Perl 6 Regex是一个更具体的类型Method,所以我有一个想法,也许我可以用常规方法做一些黑色魔法,产生同样的东西 . 我特别好奇这样做而不改变任何语法 .
但是,看看Perl6/Grammar.nqp(我几乎不了解),这真的不是一个继承的东西 . 我认为,根据我的阅读,Perl 6语法在看到一个正则表达式声明符时会切换slangs(子语言) . 也就是说,不同的语法解析 regex { ... }
和 method {...}
的内容 .
那么,首先,是吗?
然后,只是为了咯咯笑,我想也许我可能在方法块内,但告诉它使用不同的俚语(参见例如,"Slangs" from the 2013 Perl 6 Advent Calendar或"Slangs Today") .
但是,我发现的一切似乎都想改变语法 . 有没有办法在没有它的情况下执行它并返回一个被视为 regex { ... }
的字符串?
method actually-returns-a-regex {
...
}
我没有任何实际用途 . 我一直在想它 .
1 回答
首先,Perl 6设计文档要求一个API,其中regex返回一个可能匹配的惰性列表 . 如果Rakudo坚持使用该API,您可以轻松编写一个充当正则表达式的方法,但解析会非常慢(因为惰性列表往往比作为回溯堆栈的字符串位置(整数)的紧凑列表执行得更糟糕) ) .
相反,Perl 6正则表达式返回匹配 . 你也可以这样做 . 下面是一个被称为语法内的正则表达式的方法示例:
方法
rest
实现了正则表达式b.*
的等价物 . 我希望这回答了你的问题 .更新:我可能误解了这个问题 . 如果问题是"How can I create a regex object"(而不是"how can I write code that acts like a regex",据我所知),答案是你必须通过
rx//
引用结构: