我希望能够定义自定义运算符。这有可能吗?例如,为了让a***b有意义。
是否也可以用猴子修补现有的运算符?例如,让a**b总是返回一个浮点数?
发布于 2013-03-27 05:21:07
可以,停那儿吧。例如:
class Fixnum
def **(x)
self.*(x)*1.0
end
end
5**4 #==> 20.0发布于 2013-03-27 05:24:57
自定义运算符?除非你想破解C parser (或者JRuby的Java解析器等等)。OTOH,运算符主要是方法的语法糖,你可以定义所有你想要的方法。
由于许多运算符(but not all)只是伪装的方法,您可以随意修补现有运算符的实现。您必须跟踪定义其自己的**实现的所有数值类,并修补所有这些类;请注意,您需要涵盖Rational、Complex……来自内核以及来自标准库的BigDecimal之类的东西。我强烈建议不要这样做,因为这样做只会让自己痛苦不堪;例如,当结果不适合Float时,您会如何处理BigDecimal#**?那Complex#**呢?如果你需要Floats来做某事,可以通过一个to_f调用来显式的表达。
https://stackoverflow.com/questions/15647182
复制相似问题