2010-03-05 10 views
10

, ben internette sörf bu kodu koştu: Ben events.map(&:name) çalışır nasıl özellikle ilgilendiğim şeyHarita (& isim) bu Ruby kodunda ne yapar? biraz daha iyi Ruby anlamaya çalışırken

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 

? Olayların bir dizi olduğunu ve böylece harita yöntemini çağırdığını görüyorum. Şimdi sorum şu, oluşturulan haritaya aktarılan blok nerede? Bu sembolün adı nedir? Nasıl çalıştığını anlamaya çalışıyorum.

+2

Bu, * yedi * farklı sorunun tam bir kopyasıdır. Ve inanın bana, Ruby son 3 hafta içinde bu kadar değişmedi, bu yüzden cevaplar muhtemelen aynı olacak: http://StackOverflow.Com/questions/99318/, http://StackOverflow.Com/questions/1217088 /, http://StackOverflow.Com/questions/1792683/, http://StackOverflow.Com/questions/1961030/, http://StackOverflow.Com/questions/2096975/, http://StackOverflow.Com/questions/2211751 /, http://StackOverflow.Com/questions/2259775/. –

cevap

21
events.map(&:name) 

sadece uygun sözdizimsel şeker

events.map{|x| x.name} 

tam olarak eşdeğerdir.

Daha fazla bilgi için, Symbol#to_proc yöntem here yöntemine bakın. Burada, :name bir proc'ye zorlanıyor. Bu arada, bu burada sık sık ortaya çıkıyor - Google'a gitmek veya başka bir şekilde 've' ve 'işareti' ile kolon nesnesini aramak çok zor ':).

+3

Belki, şimdi "bir işareti ile kolon şeyden" bahsettiniz, bu alınıp almaya başlayacaktır :) – theIV