我可以重载/创建后缀一元运算符吗?

时间:2016-11-22 03:25:11

标签: ruby

我想在ruby中为类!创建两个一元后缀运算符!!Numeric。到目前为止,我已将其定义为

class Numeric
  def !
    (1..self).inject(:*)
  end

  def !!
    if self.even?
      (2..self).step(2).inject(:*)
    else
      (1..self).step(2).inject(:*)
    end
  end
end

但是,这意味着我必须致电5.!5.!!。我知道您可以定义一元前缀运算符,例如+@-@,但我想知道是否可以定义一元后缀运算符,以便我可以调用5!5!!而不是5.!5.!!

1 个答案:

答案 0 :(得分:4)

没有。首先,Ruby中没有后缀运算符,因此解析器无法识别。其次,即使我们有后缀运算符,尾随感叹号也是方法名称的一部分,所以如果你的程序中有一个 foo!,它将被解释为方法foo!,而不是foo已应用!