我想知道是否有一种方法可以使用(&:方法)链接方法
例如:
array.reject { |x| x.strip.empty? }
把它变成:
array.reject(&:strip.empty?)
由于其可读性,我更喜欢简写符号。
不,没有简写。您可以定义一个方法:
def really_empty?(x)
x.strip.empty?
end
并使用method
:
array.reject(&method(:really_empty?))
或者使用lambda:
really_empty = ->(x) { x.strip.empty? }
array.reject(&really_empty)
但是除非你在足够的地方使用really_empty?
,否则我不会把它们中的任何一个称为更好的分裂逻辑是有道理的。
但是,由于你使用的是Rails,你可以使用blank?
而不是.strip.empty?
:
array.reject(&:blank?)
请注意,nil.blank?
是正确的,而nil.strip.empty?
只是给你一个例外,因此它们并不完全相同;但是,你可能也想拒绝nil
s,所以使用blank?
可能会更好。 blank?
也为false
,{}
和[]
返回true,但你可能没有那些字符串数组。
编写上面的内容会非常好,但它不是支持的语法,你想要使用to_proc语法(&:)链接方法的方式是这样的:
.map(&:strip).reject(&:empty?)
你可以用ampex
gem做到这一点:
require 'ampex'
array.reject &X.strip.empty?