1

我有 ruby​​ 项目(没有 rails),我想为我的班级的逻辑 AND 和 OR 运算符添加别名。我已经为我的类重载了逻辑运算符,但是如果我像这样添加alias_method :foo, :or和使用class_example_1 foo class_example_2我会得到 SyntaxError。如何使别名起作用?

4

1 回答 1

0

不幸的是,你不能这样做。

Ruby 的中缀运算符喜欢and并且or被硬编码为语言语法的一部分,因此您不能像在 Haskell 或 Kotlin 中那样定义新的中缀运算符。

有一些奇怪但有趣的技巧可以让你获得类似的结果,但是解析器的限制意味着你不能完全按照你想要的方式去做。

或者,您可以foo不带括号调用,看起来非常相似:

class_example_1.foo class_example_2

或者,由于您已经重载了现有的逻辑运算符,只需使用这些:

class_example_1 or class_example_2
于 2019-04-21T13:07:49.327 回答