SORU
26 ŞUBAT 2010, Cuma


Ruby Anlama Semboller

"Understanding Ruby Symbols", hala veri temsili olarak anlamadım semboller kullanmaya gelince. hafıza okuma rağmen Eğer bir sembol, iki farklı nesne yer, aynı bellekte yer varsa, ne kadar değildir o zamanfarklıdeğerleri? Aynı bellek konumunu aynı değeri içermesini beklerdim. Linkten bir alıntı:

Dizeleri aksine, aynı adı taşıyan semboller başlatılır ve yakut oturumu sırasında, bellekte sadece bir kez var

Ben sadece değerleri aynı bellekte yer alan ayırt etmek için yönetir nasıl anlamıyorum.


EDİT

Bu yüzden örnek verebiliriz:

patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }

patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094

patient1 patient2 sorun değil de karma. :ruby ancak bir semboldür. Eğer çıkış olursak aşağıdaki:

patient1.each_key {|key| puts key.to_s}

Çıktı ondan sonra ne olacak? "red" "programming"?


DAHA DÜZENLEMEK

Hala gerçekten çok kafam karıştı. Bir sembol olduğunu düşünüyorumişaretçibir değer için. Bir saniye karma unutalım. Ben soru; bir sembol bir değer atar mısın? Bir sembol bir değere sahip bir değişken için bir işaretçi. Eğer küresel semboller, bir sembol her zaman tek bir şeyi işaret anlamına mı geliyor?

CEVAP
26 ŞUBAT 2010, Cuma


Bu göz önünde bulundurun:

x = :sym
y = :sym
(x.__id__ == y.__id__ ) && ( :sym.__id__ == x.__id__) # => true

x = "string"
y = "string"
(x.__id__ == y.__id__ ) || ( "string".__id__ == x.__id__) # => false

Bu yüzden, ancak sembol bir nesne oluşturmak sürece içindekileri olarak aynı, bellek aynı nesne kullanılır. Bu bir sembol immutable object çünkü bir sorun değildir. Dizeleri değiştirilebilir.

Edit: (aşağıdaki yorum yanıt Olarak)

Orijinal makalede, değer sembolü saklanacağını, bir karma muhafaza ediliyor. Bu göz önünde bulundurun:

hash1 = { "string" => "value"}
hash2 = { "string" => "value"}

Bu bellek dört dize nesneleri ve iki karma nesneler altı nesneleri oluşturur.

hash1 = { :symbol => "value"}
hash2 = { :symbol => "value"}

Bu sadece hafızada beş nesneleri oluşturur -- bir sembol, iki dize ve iki karma nesneleri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bethliebert

    bethliebert

    23 EKİM 2008
  • Skittles Page

    Skittles Pag

    28 Mart 2011
  • TouchePro

    TouchePro

    27 EYLÜL 2007