什么是'&'在铁轨?

时间:2016-11-03 18:09:25

标签: ruby-on-rails ruby

我想弄清楚'&'是怎么回事在下面的代码中工作?

:active只是一个字符串

def current_subscription   
 subscriptions.find(&:active) 
end

2 个答案:

答案 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)