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

Eli*_*off 5 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
Run Code Online (Sandbox Code Playgroud)

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

use*_*428 5

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