我试图将匹配对象转换为perl6中的字符串.匹配对象上的Str方法定义为:
method Str(Match:D: --> Str:D)@H_502_4@我想我可以用Str($match)来完成这个.它似乎将其转换为字符串,但我使用以下代码的字符串收到错误:
my $searchme = "rudolph"; my $match = $searchme ~~ /.*dol.*/; say $match.WHAT; my $test1 = Str($match); say $test1.WHAT; say $test1;@H_502_4@随着输出:
(Match) (Str)@H_502_4@有错误:
@H_502_4@Cannot find method ‘gist’: no method cache and no .^find_method in@H_502_4@但是,如果我跑:
block at .code.tio line 6
my $searchme = "rudolph"; my $match = $searchme ~~ /.*dol.*/; say $match.WHAT; my $test1 = $match.Str; say $test1.WHAT; say $test1;@H_502_4@我没有得到任何错误,结果如下:
(Match) (Str) rudolph@H_502_4@这是一个错误还是我误解了它是如何工作的? @H_502_4@谢谢阅读.
解决方法
我写这个作为答案,即使它实际上是一个错误的不完整的讨论,所以根本不是正常的SO票价.许多评论的替代方案似乎并不好.
@H_502_4@这是一个错误.也许你只是打了this.
@H_502_4@dd $test1;而不是说$test1;是有用的,它显示BOOTStr $test1 =(没有.perl方法的BOOTStr).
@H_502_4@基于那个我searched the rakudo repo for
BOOTStr
并导致了上述问题.
@H_502_4@高尔夫球进一步导致:
say $= Str(Match.new);@H_502_4@请注意,这些都很好:
say Str(Match.new); say $= Int(Match.new); say $= Str(Date.new: '2015-12-31');@H_502_4@它似乎是泄漏一些有关Rakudo / NQP / MoarVM引导程序的实现细节的组合;匹配是一个NQP对象; Str()就是那个不稳定的;并将其分配给标量容器($是一个匿名容器)使得这种奇怪的可见性. @H_502_4@如果我弄清楚的话,我会添加更多.