ruby-on-rails - ruby on rails block 语法使用 & :

标签 ruby-on-rails ruby syntax block

假设我有一个问题模型和一个答案模型,问题有_很多答案(这是一个多项选择题)。

假设 questions 是 Question 对象的集合。

为了收集所有的答案,我可以这样做:

questions.collect(&:answers)

两个问题:

  1. 这个语法到底是什么意思?是否扩展为

    questions.collect { |q| q.answers } 
    

    还是这里发生了其他事情?

  2. 有什么办法吗

    questions.collect { |q| q.answers.shuffle } 
    

    使用相同的语法?

    collect(&:answers.shuffle) 
    

    没有这样做。

我似乎无法在网络上有关 ruby​​ block 的教程中找到它,并且搜索它也不起作用(搜索引擎忽略“&:”)。我在一些继承的代码中发现了它。

谢谢

最佳答案

是的,第一个问题是 N 重复的,但关于第二个问题:不,你不能链接方法。 但是,没有什么能阻止您 - 除了编写可能会让人困惑的代码 - 来创建您自己的工具:

class Symbol
  def to_proc
    proc do |obj| 
      self.to_s.split(/\./).inject(obj, :send)
    end
  end
end

p ["1", "2", "3"].map(&:"to_i.succ")
# [2, 3, 4]

您甚至可以找到发送参数的方法,尽管它可能不会很漂亮。

关于ruby-on-rails - ruby on rails block 语法使用 & :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942285/

相关文章:

list - Lisp 递归归并排序与升序?

ruby-on-rails - 获取两个事件记录关系的交集,rails

javascript - 多个 GET 调用的性能影响与从服务器以 JSON 格式向 AJAX 发送更复杂的 POST/GET 请求

ruby-on-rails - 如何从/:id to/:friendly_id重定向

ruby - Ruby 的双冒号 `::` 是什么?

javascript - 如果我想在多种语言中保持一致,我应该使用双引号还是单引号来引用字符串?

ruby-on-rails - 我可以让带有嵌套形式的 Rails update_attributes 查找现有记录并添加到集合而不是创建新记录吗?

ruby-on-rails - 在 js.erb 文件中使用 jquery 渲染部分出现错误。渲染不是一个函数

ruby-on-rails - 无法运行 Rails 服务器

javascript - var functionName = function() {} vs function functionName() {}