我可以更改运营商的关联性吗?

时间:2016-12-16 00:54:25

标签: ruby associativity

有一个非常好的Ruby运算符表和它们各自的关联性here。根据这张表,相当数量的运算符是关联的,这对我来说并不是特别有用。有没有办法可以将左关联运算符更改为右关联?我的代码设置x * x * x的方式不起作用,但x * (x * x)会起作用。这是因为我x * x的具体实现让它返回一个数组。因此,数组可以是传递给方法的参数,但它不能是调用方法的对象。我无法覆盖数组类中的*方法,因为我的项目中的其他位置正在使用其默认功能,因此猴子修补不是一个选项。有没有办法改变我的班级*运算符的关联性?

1 个答案:

答案 0 :(得分:0)

没有

与几乎所有语言一样,Ruby不允许您更改运算符的关联性。 (有些例外是Ioke,Seph,Haskell,Fortress,也许是Perl6。)

对于类Numeric的实例,有一个type coercion protocol可能会被滥用来改变算术运算符的关联性,但这是一个非常脆弱的黑客而不是协议的意图对