我想知道是否有一种方法可以使用 (&:method) 链接一个方法
例如:
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?
只是给你一个异常(exception),所以它们并不完全等同;但是,您可能也想拒绝 nil
,因此无论如何使用 blank?
可能会更好。 blank?
也为 false
、{}
和 []
返回 true,但您可能没有这些在你的字符串数组中。
关于ruby-on-rails - 在 Ruby 中使用 Symbol#to_proc 简写的链接方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460204/