在Ruby中使用Symbol#to_proc速记链接方法?

mag*_*e f 9 ruby ruby-on-rails ruby-on-rails-3.1

我想知道是否有一种方法可以使用(&:方法)链接方法

例如:

array.reject { |x| x.strip.empty? }
Run Code Online (Sandbox Code Playgroud)

把它变成:

array.reject(&:strip.empty?)
Run Code Online (Sandbox Code Playgroud)

由于其可读性,我更喜欢简写符号.

mu *_*ort 7

不,没有简写.您可以定义一个方法:

def really_empty?(x)
  x.strip.empty?
end
Run Code Online (Sandbox Code Playgroud)

并使用method:

array.reject(&method(:really_empty?))
Run Code Online (Sandbox Code Playgroud)

或者使用lambda:

really_empty = ->(x) { x.strip.empty? }
array.reject(&really_empty)
Run Code Online (Sandbox Code Playgroud)

但除非你really_empty?在足够的地方使用分裂逻辑是有道理的,否则我不会把它们中的任何一个称为更好.

但是,由于您使用的是Rails,因此您可以使用blank?而不是.strip.empty?:

array.reject(&:blank?)
Run Code Online (Sandbox Code Playgroud)

请注意,这nil.blank?是正确的,而nil.strip.empty?只是提出异常,因此它们并不完全等同; 但是,你可能也想拒绝nils,所以blank?无论如何使用可能会更好.blank?也返回真false,{}以及[]但是你可能没有你的那些字符串数组英寸