我想弄清楚'&'是怎么回事在下面的代码中工作?
:active只是一个字符串
def current_subscription
subscriptions.find(&:active)
end
答案 0 :(得分:0)
在这种情况下,它代表:active.to_proc
,它是以下形式的简称:
subscriptions.find { |x| x.active }
您经常会看到&:
符号,它大致意味着"在提供的对象上使用名称调用方法"。
请记住:active
不是字符串,它是符号,或者是内化的"串。 Ruby的差异很微妙但很基础。符号只在Ruby中存在一次,它们都是相同的,而字符串可以复制但是相同。在实践中,字符串需要更多的内存来存储和更多的努力来比较,这就是为什么符号经常出现在哈希中并作为方法的参数:它们是高效的。
答案 1 :(得分:0)
只需删除换行符:
cats.each do |cat| cat.name end
注意,在块方面有两种不同的编码风格。一种编码风格表示总是将do / end用于跨越多行的块,并始终使用{/}作为单行块。如果你跟着那所学校,你应该写
cats.each {|cat| cat.name }
另一种方式是始终对主要执行副作用的块使用do / end,对主要为其返回值执行的块执行{/}。由于每个都抛弃了块的返回值,因此只为它的副作用传递一个块是有意义的,所以,如果你跟着那个学校,你应该用do / end写它。
cats.each(&:name)