Unicode和ASCII操作符之间的区别

10
我发现当在引号内插入时,Unicode和ASCII操作符有时会表现不同。
考虑以下示例:

Consider this:

$ perl6 -e'my $a = BagHash.new: <a a a a b b b c c c c c d>;for $a.keys -> $k { say "$k => $a<<$k>>" }'

d => 1
b => 3
c => 5
a => 4

和这个:

$ perl6 -e'my $a = BagHash.new: <a a a a b b b c c c c c d>;for $a.keys -> $k { say "$k => $a«$k»" }'

c => c(5) a(4) b(3) d«c»
a => c(5) a(4) b(3) d«a»
b => c(5) a(4) b(3) d«b»
d => c(5) a(4) b(3) d«d»

但是即使使用Unicode运算符,这也可以正常工作:

$ perl6 -e'my $a = BagHash.new: <a a a a b b b c c c c c d>;for $a.keys -> $k { say "$k => {$a«$k»}" }'
d => 1
b => 3
a => 4
c => 5

这是一个bug吗,还是有我看不到的解释?


4
对我来说感觉像是个漏洞。 - Elizabeth Mattijsen
2
目前,据我所知,我们将它们称为“Unicode”和“ASCII”运算符。 - Elizabeth Mattijsen
感谢 @ElizabethMattijsen :s/UTF-8/Unicode/ - Fernando Santagata
Rakudo问题编号为:2825 - LuVa
1个回答

5

看起来已经通过提交 2835 由MasterDuke17修复:

  sub bracket_ending($matches) {
      my $check     := $matches[+$matches - 1];
      my str $str   := $check.Str;
      my $last  := nqp::substr($str, nqp::chars($check) - 1, 1);
-     $last eq ')' || $last eq '}' || $last eq ']' || $last eq '>'
+     $last eq ')' || $last eq '}' || $last eq ']' || $last eq '>' || $last eq '»'
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接