3

我有一个 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

非常感谢您!

4

2 回答 2

5

以下方法返回与提供的过程相反的过程。

def negate(procedure)
  Proc.new { |*args| !procedure.call(*args) }
end

或者,使用更短的符号:

def negate(procedure)
  proc { |*args| !procedure.call(*args) }
end
于 2013-11-04T12:06:18.770 回答
1

这有帮助吗?

p = Proc.new { |number| number.even? }
p.call(1) #=> false
!p.call(1) #=> true
于 2013-11-04T12:09:14.677 回答