我有一个Proc,它是谓词。
Proc.new { |number| number.even? }
有没有办法以某种方式创建另一个具有相反含义的Proc?我不能改变Proc的“体”,因为Proc将作为函数参数。所以我想要这样的东西:
not(Proc.new { |number| number.even? }
# which of course doesn't work :(
我希望它和
一样Proc.new { |number| number.odd? }
我的想法是我想要一个类似于此的函数:
def negate(proc)
negated proc with meaning opposite of this of proc
end
非常感谢你!
答案 0 :(得分:5)
以下方法返回与提供的过程相反的过程。
def negate(procedure)
Proc.new { |*args| !procedure.call(*args) }
end
或者,使用较短的符号:
def negate(procedure)
proc { |*args| !procedure.call(*args) }
end
答案 1 :(得分:1)
这有帮助吗?
p = Proc.new { |number| number.even? }
p.call(1) #=> false
!p.call(1) #=> true