我希望能够定义自定义运算符。那可能吗?例如,使a***b
意味着什么。
是否也可以修补现有的运营商?例如,要使a**b
始终返回浮点数?
答案 0 :(得分:3)
是的,你可以。例如:
class Fixnum
def **(x)
self.*(x)*1.0
end
end
5**4 #==> 20.0
答案 1 :(得分:2)
自定义运营商?除非你想破解C parser(或JRuby的Java解析器或......)。 OTOH,运算符主要是方法的语法糖,你可以定义你想要的所有方法。
由于许多运算符(but not all)只是伪装的方法,因此您可以根据需要对现有运算符的实现进行修补。您必须跟踪定义自己的**
实现的所有数字类并修补所有这些类;请注意,您需要覆盖核心的Rational
,Complex
,...以及标准库中的BigDecimal等内容。我强烈建议不要这样做,你只是为了痛苦和痛苦而努力;例如,当结果不适合BigDecimal#**
时,您会对Float
做什么?那么Complex#**
呢?如果您需要Float
s,请通过to_f
电话明确说明。