Perl6:使用S语添加符号

问题描述 投票:7回答:1

我正在尝试将«€»作为«$»标量的别名添加,我认为使用a语来完成它是一种方法。但是perl6.doc根本没有提到S语。

我已阅读以下内容:

并查看了Slang :: Roman和Slang :: Tuxic模块。

结果是此文件(ScalarEU.pm6):

use nqp;

unit module ScalarEU2;

sub EXPORT(|)
{
  my role Euscalar
  {
    token sigil:sym<$> { '€' | '$' }
  }

  my Mu $MAIN-grammar := nqp::atkey(%*LANG, 'MAIN');
  my $grammar := $MAIN-grammar.HOW.mixin($MAIN-grammar, Euscalar);

  $*LANG.define_slang('MAIN', $grammar, $*LANG.actions);

  {}
}

然后使用它的程序(称为hello):

use lib "lib";

use ScalarEU;

sub MAIN ($name)
{
  say "Hello, €name!";
}

但是它不起作用,或者说,它没有做应做的事情:

$ ./hello Tom
Hello, €name!

((我以这种方式编写了程序,以免崩溃。)

我还没有添加动作类,但是设置“令牌标记”的方式应该不需要吗?但是这个假设是基于11年的文章,可能是错误的。

[此外,https://github.com/rakudo/rakudo/issues/2404说$ * LANG已过时,而改用$?LANG。 REPL同意:

> $*LANG
Dynamic variable $*LANG not found

> $?LANG
(low-level object `Perl6::Grammar`)

但是程序可以同时使用两者,而不会出错。 (我已经尝试过。)

syntax raku
1个回答
0
投票

sigil标记不再是原型,而是将here定义为替代。

所以作为最小的解决方案:token sigil { <[$@%&€]> },但是随后出现了新问题...

© www.soinside.com 2019 - 2024. All rights reserved.