我想在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.!!
。
答案 0 :(得分:4)
没有。首先,Ruby中没有后缀运算符,因此解析器无法识别。其次,即使我们有后缀运算符,尾随感叹号也是方法名称的一部分,所以如果你的程序中有一个 foo!,它将被解释为方法foo!
,而不是foo
已应用!
。