在Raku中定义新的中缀运算符

10
请告诉我如何在Raku中定义一个新操作符,例如,如何实现定义为以下内容的箭头操作符:
operator ▶ {my ($left, $right) = @_; $left->{$right}}

4
https://docs.raku.org/language/functions#Defining_operators - raiph
读者可能无法理解 右侧的代码。Raku 编译器在编译时会拒绝它。我可以编辑问题,并计划这样做,但我想用这个评论记录一个相关的 SO 编辑概念。这是 Perl 代码。一旦答案被接受,可能适合添加 [perl] 标签,以便寻找答案的搜索者能够找到它。如果需要让搜索/监视 [perl] 标签的人关注它,那么现在添加它是有意义的。但事实并非如此,因此立即添加 [perl] 标签是不明智的,因为它很可能会浪费他们的时间。 - raiph
@user0721090601 不完全是这样。有人可以发布悬赏,无论哪个答案获得了悬赏,都会成为被接受的答案。 - Brad Gilbert
3
如果你看到我的极低用户编号 1337,你可能会意识到我已经在这里很久了。 - Brad Gilbert
2
它还可以拼写成l33t,太酷了! - jjmerelo
显示剩余2条评论
1个回答

14

这很简单:

sub infix:<▶> ($left, $right) {
  $left."$right"() 
}


# Example: 

class Foo {
  method bar { "hello" }
}

my $a = Foo.new;

say $a ▶ 'bar'
# hello

sub infix: < > 定义新的中缀运算符(其他选项包括prefix, postfix, circumfix, 和 postcircumfix,后两个需要一个开头和结尾部分,如 <( )> 表示开放和关闭括号)。

($left, $right) 如其名称所示,处理左右两边的值。

要根据字符串调用方法,您可以使用结构." "(),其中方法名称用引号括起来,后跟括号 - 即使没有参数。 在这种情况下,我们只插入基本内插的变量,虽然可能存在更复杂的操作。


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