Ruby:否定传递给proc的哈希?
在ruby中,以下表达式:Ruby:否定传递给proc的哈希?,ruby,Ruby,在ruby中,以下表达式: x.filter{| n | n.even?} 也可以写成: x.filter(&:偶数? 所以,我想知道我该怎么写这个表达式? x.filter{| n |!n.even?} 如果不使用Sam和engineerskmnky在下面问题的评论中所说的odd?方法,就不可能直接执行x.filter{n | | n.偶?}操作(实际上是块内的两个操作) 我想这只是一个简单的示例,不是一个真正的代码,因此如果您有一个方法没有反向的,并且您不想创建反向的,那么您可以通过以下方式
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(¬_even)
您还可以使用
reject
方法,该方法将在不使用lambda的情况下为您提供相同的结果。该过程本质上将被调用为对象上的\u proc。你的否定是在对象上的,所以除非你把它存储为进程,否则你不能调用它。如果这是实际的代码,那么为什么不使用x.filter(&:odd?)呢?偶数?
是在给定对象上调用的方法,这就是Symbol#to_proc
在as中的工作方式正在绕过BasicObject#的返回值调用code>(not)代码>。所以你不能这样写。您可以添加一个方法非偶数?
,但这只是意味着奇数?
那么为什么不使用奇数?
。如果x
是可枚举的(包括可枚举的
),那么你可以做\uuuu,而不是*u偶数=x.partition(&:偶数?
),但我认为这不是你想要的。我只想指出,你总是有拒绝
对应的过滤器
/选择
。看哪一个显示了一些黑客行为的符号。但是,如果其他人正在阅读代码,那么最好避免这些技巧。许多Ruby方法,如filter
都有其否定的对应方法,如reject
。