【问题标题】:What does map(&:name) do in this Ruby code?map(&:name) 在这段 Ruby 代码中做了什么?
【发布时间】:2011-01-24 04:55:27
【问题描述】:

为了更好地理解 Ruby,我在网上遇到了这段代码:

require 'rubygems'
require 'activeresource'



ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/events.log")

class Event < ActiveResource::Base
  self.site = "http://localhost:3000"
end

events = Event.find(:all)
puts events.map(&:name)

e = Event.find(1)
e.price = 20.00
e.save

e = Event.create(:name      => "Shortest event evar!", 
                 :starts_at => 1.second.ago,
                 :capacity  => 25,
                 :price     => 10.00)
e.destroy

我特别感兴趣的是events.map(&amp;:name) 是如何工作的?我看到 events 是一个数组,因此它正在调用它的 map 方法。现在我的问题是,传递给地图的块在哪里创建?在这种情况下,符号 :name 是什么?我正在尝试了解它是如何工作的。

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:
events.map(&:name)

完全等价于

events.map{|x| x.name}

它只是方便的语法糖。

有关更多详细信息,请查看Symbol#to_proc 方法here。在这里,:name 被强制转换为 proc。

顺便说一句,这经常出现在这里 - 很难用谷歌搜索或以其他方式搜索“带有 & 号的冒号”:)。

【讨论】:

  • 也许,既然您已经提到了“带有 & 符号的冒号”,它就会开始被采纳 :)
猜你喜欢
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多