ruby-on-rails - 在 Ruby 中使用 Symbol#to_proc 简写的链接方法?

标签 ruby-on-rails ruby ruby-on-rails-3.1

我想知道是否有一种方法可以使用 (&: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/

相关文章:

ruby-on-rails - 使用存在和正则表达式格式的 Rails 验证

javascript - 在 ruby​​ on Rails 中使用 haml 将值注入(inject)到 javascript 中

ruby - Ruby 中的 While 循环和转换为函数

Ruby:从 bash 脚本运行脚本?

ruby-on-rails - 如何使用 Rails 代码/将变量传递给 .coffee javascript 文件?

ruby-on-rails - 在Rails查询中包含LIKE子句的最佳方法是什么?

ruby-on-rails - 带参数的 before_filter

ruby-on-rails-3.1 - 如何访问 Rails 3.1 中的图像?

ruby-on-rails - Facebook 与 ruby​​ on rails 的集成

ruby - 运行 rake 时缺少 gem