2011-01-11 16 views
32

Ruby öğrenirken, bazen "=>" operatörüne rastlıyorum. GenellikleRuby'de "=>" ne anlama geliyor ve nasıl çalışıyor?

:symbol => value 

şeklinde görmek ve onu işlevlerine değerleri geçerken sık kullanılacak görünüyor. Bu operatör tam olarak ne adlandırdı? Ne yapar? Ruby'de yerleşik mi yoksa Rails ve DataMapper gibi farklı çerçevelerin sembol sınıfına eklediği bir şey mi? Sadece sembol sınıfıyla bağlantılı olarak mı kullanılıyor? Teşekkürler.

cevap

39

=> değişmez bir HashMap değerlerden anahtarları ayırır. Bu, yüklenemez ve özel olarak sembollere bağlı değildir.

Bir hashmap literal formu {key1 => value1, key2 => value2, ...} biçimindedir, ancak bir işlevin son parametresi olarak kullanıldığında, kaşlı ayraçları bırakabilirsiniz. Yani f(:a => 1, :b => 2) gibi bir işlev çağrısı gördüğünüzde, :a ve :b ve 1 ve 2 değerlerini içeren bir hashmap olan bir bağımsız değişken ile f çağrılır. Bu operatörü duyabilir

+0

Daha fazla bilgi için Kazma [Hashes] bölümündeki eğitici bölüme bakın (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/tut_containers.html%23hashes) ve [Hashes'teki referans bölümü] (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/language.html%23hashes). Ruby 1'de olduğunu unutmayın.9 Alternatif olarak, karma bir sembolde bir anahtar/değer çiftini belirtebilirsiniz: bu foo: bar gibi sembol olan: 'foo 'sembolü olarak anahtar oluşturur. – Phrogz

+0

Büyük sorunları daha küçük olanlara ayırın. İlişkilendirilmiş dizileri ve Ruby Sembollerini öğrenirseniz, Hashes'i anlamanın bir sorunu olmaz. => True gerekli:: Başlık, String,: – karatedog

+0

Dolayısıyla, sadece netleştirmek için, burada mülkiyet DataMapper bir örnektir uzunluk => 5..200 Aynı olarak emlak (geçerli: başlık, String, {: required => true,: length => 5..200}) ? –

4

Eğer başka Google'lamaya yapmak istiyorsanız, => o (<=> bir uzay gemisi gibi aynı anlamda) bir roket gibi görünüyor, çünkü bazen bir hashrocket denir ve bu sağlamalarının kullanılıyor.

Ya da SymbolHound'u kullanabilirsiniz.

+0

Bu bilmek güzel. Bu konuda bilgi almak için Google'da biraz aradım ancak hiçbir yere ulaşmadım. Bahşiş için teşekkürler. –

+0

@DustinMartin Kısa bir süre önce diğer sözdizimini aramakta zorluk çekmeniz durumunda, SymbolHound adlı bir arama motoruna rastladım. –

4

İpucu:

Ayrıca
{ 
    a: "A", 
    b: "B" 
} 
+0

ops. Sadece yukarıda belirtilen fark ettim :) – amrnt

0

In Ruby what does "=>" mean and how does it work? için:

Sen çoğunlukla mısın Ruby 1.9 yılında, {:a => "A", :b => "B"} gibi bir karma bunu kullanıyorsanız, bir JSON karma gibi kullanabilirsiniz Bir fonksiyon için parametreleri tanımlamak için =>'a bakın. Bunu güzel bir kolaylık olarak düşünün: Tüm parametreler devasa bir kareye sarıldıkça, parametrelerinizin doğru sırasını hatırlamalısınız. Eğer

link_to "My link", my_path, :confirm => "Are you sure?"

gibi basit bir yardımcı yöntem varsa Yani bu bir nadiren kullanılan parametresini kullanmak istiyorsanız sırf

link_to "My link", my_path, null, null, null, null, "Are you sure?"

çok daha iyidir. Bu yüzden bir hash ile parametrelerin geçirilmesi, hayatı kolaylaştırmak için Ruby/Rails'de bir sözleşmedir.