Jim*_*ger 9 scope infix-notation subroutine raku
此代码按预期工作:
\nsub infix:<mean>(*@a) {\n @a.sum / @a.elems\n}\nsub Mean (*@a) {\n @a.sum / @a.elems\n}\n\nsay EVAL 'Mean 2, 6, 4'; # Output: 4\nsay EVAL '2 mean 6 mean 4'; # Output: 4\n
Run Code Online (Sandbox Code Playgroud)\n当第 7 行在其自己的范围内时,它会按预期工作:
\n{say EVAL 'Mean 2, 6, 4';} # Output: 4\n
Run Code Online (Sandbox Code Playgroud)\n但是当第 8 行在它自己的作用域内时:
\n{say EVAL '2 mean 6 mean 4';} \n\n===SORRY!=== Error while compiling .../EVAL_1\nTwo terms in a row\nat .../EVAL_1:1\n------> 2\xe2\x8f\x8f mean 6 mean 4\n expecting any of:\n infix\n infix stopper\n statement end\n statement modifier\n statement modifier loop\n\n
Run Code Online (Sandbox Code Playgroud)\n为什么这两个替补的待遇不同?
\n这是一个已知问题,也会影响 REPL。
问题是,执行字符串EVAL
将“看到”周围的范围及其所有添加内容,因此:
say EVAL 'infix:<mean>(infix:<mean>(2, 6), 4)';
Run Code Online (Sandbox Code Playgroud)
将产生 4,因为 sub&infix:<mean>(*@a)
是已知的。
但允许它作为中缀工作的语法更改目前在EVAL
. 这就是您看到编译时错误的原因。
我非常希望我们能够使用基于 RakuAST 的新 Raku 语法来解决这个问题。
归档时间: |
|
查看次数: |
98 次 |
最近记录: |