【发布时间】:2017-03-17 10:46:04
【问题描述】:
我想弄清楚下面代码中的“&”是如何工作的?
:active 只是一个字符串
def current_subscription
subscriptions.find(&:active)
end
【问题讨论】:
标签: ruby-on-rails ruby
我想弄清楚下面代码中的“&”是如何工作的?
:active 只是一个字符串
def current_subscription
subscriptions.find(&:active)
end
【问题讨论】:
标签: ruby-on-rails ruby
只需删除换行符:
cats.each do |cat| cat.name end
请注意,块有两种不同的编码风格。一种编码风格说,对于跨越多行的块总是使用 do/end,对于单行块总是使用 {/}。如果你跟随那所学校,你应该写
cats.each {|cat| cat.name }
另一种风格是始终对主要针对其副作用执行的块使用 do/end,对主要针对其返回值执行的块使用 {/}。由于每个都丢弃了块的返回值,因此传递一个块只是因为它的副作用才有意义,所以,如果你遵循那个学派,你应该用 do/end 编写它。
cats.each(&:name)
【讨论】:
在这种情况下,它代表:active.to_proc,它是以下的缩写:
subscriptions.find { |x| x.active }
您会经常看到&: 符号,它大致表示“在提供的对象上调用具有名称的方法”。
记住:active 不是字符串,它是符号或“内部化”字符串。区别是微妙的,但对 Ruby 来说是根本的。符号在 Ruby 中只存在一次,它们都是相同的,而字符串可以重复但等价。在实践中,字符串需要更多的内存来存储和更多的努力来比较,这就是为什么符号经常出现在哈希中并作为方法的参数:它们很有效。
【讨论】: