Ruby:否定传递给proc的哈希?

Ruby:否定传递给proc的哈希?,ruby,Ruby,在ruby中,以下表达式: x.filter{| n | n.even?} 也可以写成: x.filter(&:偶数? 所以,我想知道我该怎么写这个表达式? x.filter{| n |!n.even?} 如果不使用Sam和engineerskmnky在下面问题的评论中所说的odd?方法,就不可能直接执行x.filter{n | | n.偶?}操作(实际上是块内的两个操作) 我想这只是一个简单的示例,不是一个真正的代码,因此如果您有一个方法没有反向的,并且您不想创建反向的,那么您可以通过以下方式

在ruby中,以下表达式:
x.filter{| n | n.even?}
也可以写成:
x.filter(&:偶数?
所以,我想知道我该怎么写这个表达式?
x.filter{| n |!n.even?}

如果不使用Sam和engineerskmnky在下面问题的评论中所说的
odd?
方法,就不可能直接执行
x.filter{n | | n.偶?}
操作(实际上是块内的两个操作)

我想这只是一个简单的示例,不是一个真正的代码,因此如果您有一个方法没有反向的,并且您不想创建反向的,那么您可以通过以下方式创建lambda或proc:

not_even = -> (n) { !n.even? }
然后在过滤器上调用它,如下所示:

x.filter(&not_even)

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

该过程本质上将被调用为对象上的\u proc。你的否定是在对象上的,所以除非你把它存储为进程,否则你不能调用它。如果这是实际的代码,那么为什么不使用x.filter(&:odd?)呢?
偶数?
是在给定对象上调用的方法,这就是
Symbol#to_proc
在as
中的工作方式BasicObject#的返回值调用code>(not)。所以你不能这样写。您可以添加一个方法
非偶数?
,但这只是意味着
奇数?
那么为什么不使用
奇数?
。如果
x
是可枚举的(包括
可枚举的
),那么你可以做
\uuuu,而不是*u偶数=x.partition(&:偶数?
),但我认为这不是你想要的。我只想指出,你总是有
拒绝
对应的
过滤器
/
选择
。看哪一个显示了一些黑客行为的符号。但是,如果其他人正在阅读代码,那么最好避免这些技巧。许多Ruby方法,如
filter
都有其否定的对应方法,如
reject