【问题标题】:What is '&' in rails? [duplicate]轨道中的“&”是什么? [复制]
【发布时间】:2017-03-17 10:46:04
【问题描述】:

我想弄清楚下面代码中的“&”是如何工作的?

:active 只是一个字符串

def current_subscription   
 subscriptions.find(&:active) 
end

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    只需删除换行符:

     cats.each do |cat| cat.name end
    

    请注意,块有两种不同的编码风格。一种编码风格说,对于跨越多行的块总是使用 do/end,对于单行块总是使用 {/}。如果你跟随那所学校,你应该写

     cats.each {|cat| cat.name }
    

    另一种风格是始终对主要针对其副作用执行的块使用 do/end,对主要针对其返回值执行的块使用 {/}。由于每个都丢弃了块的返回值,因此传递一个块只是因为它的副作用才有意义,所以,如果你遵循那个学派,你应该用 do/end 编写它。

     cats.each(&:name)
    

    【讨论】:

      【解决方案2】:

      在这种情况下,它代表:active.to_proc,它是以下的缩写:

       subscriptions.find { |x| x.active }
      

      您会经常看到&: 符号,它大致表示“在提供的对象上调用具有名称的方法”。

      记住:active 不是字符串,它是符号或“内部化”字符串。区别是微妙的,但对 Ruby 来说是根本的。符号在 Ruby 中只存在一次,它们都是相同的,而字符串可以重复但等价。在实践中,字符串需要更多的内存来存储和更多的努力来比较,这就是为什么符号经常出现在哈希中并作为方法的参数:它们很有效。

      【讨论】:

      • 谢谢。任何其他参考资料都会有帮助。
      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 2018-01-12
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2011-07-30
      相关资源
      最近更新 更多