Ruby:否定哈希传递给proc?

时间:2016-08-19 16:26:12

标签: ruby

在ruby中,使用以下表达式:     x.filter {|n| n.even?} 也可以写成:     x.filter(&:even?) 所以,我想知道如何写这个表达式?     x.filter {|n| !n.even?} 不使用odd?方法

1 个答案:

答案 0 :(得分:4)

正如Sam和engineeringkmnky在下面的评论中所说的那样,不可能直接执行x.filter { |n| !n.even? }操作(实际上是在块中进行了两次操作)。

我想这只是一个简单的例子而不是真正的代码所以如果你的方法没有反向的并且你不想创建一个,你可以创建一个lambda或proc以下方式:

not_even = -> (n) { !n.even? }

然后在过滤器上调用它:

x.filter(&not_even)

您还可以使用reject方法,这样可以在不使用lambda的情况下为您提供相同的结果。