假设我有一个问题模型和一个答案模型,问题有_很多答案(这是一个多项选择题)。
假设 questions 是 Question 对象的集合。
为了收集所有的答案,我可以这样做:
questions.collect(&:answers)
两个问题:
这个语法到底是什么意思?是否扩展为
questions.collect { |q| q.answers }
还是这里发生了其他事情?
有什么办法吗
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/