在Ruby中使用Symbol#to_proc速记链接方法?
我想知道有没有办法可以使用(&:方法)链接方法
例如:
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?
否则我不会更好地调用其中任何一个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做到这ampex
:
require 'ampex' array.reject &X.strip.empty?