2

我希望能够定义自定义运算符。那可能吗?例如,使a***b某事变得有意义。

是否也可以对现有运营商进行猴子补丁?例如,让a**b总是返回一个浮点数?

4

2 回答 2

3

是的你可以。例如:

class Fixnum
  def **(x)
    self.*(x)*1.0
  end
end

5**4 #==> 20.0
于 2013-03-26T21:21:06.763 回答
2

自定义运算符?除非你想破解C 解析器(或 JRuby 的 Java 解析器或......)。OTOH,运算符主要是方法的语法糖,您可以定义所有想要的方法。

由于许多运算符(但不是全部)只是变相的方法,因此您可以随意修补现有运算符的实现。您必须追踪所有定义自己的**实现的数字类并修补所有这些类;请注意,您需要覆盖核心中的Rational, Complex, ... 以及标准库中的BigDecimal等内容。我强烈建议不要这样做,你只会让自己承受痛苦和折磨;例如,BigDecimal#**当结果不适合 a 时,你会怎么做Float?怎么样Complex#**?如果您需要s 某事,请通过调用Float使其明确。to_f

于 2013-03-26T21:24:57.037 回答