Eğer ifadeler yakut 1.9'da kapsam getirmiyorsa?


Yanıtlar:


9

Bunun Ruby 1.9'da yapılmasının iki nedeni aşağıdaki slaytlardadır, ancak sunum yapan kişinin iletişim kutusu olmadan açık olmayabilir. Kapsam ififadelerinin yapmanıza izin verdiği iki şey, kaynak kodunuzda if ifadesinin dışında erişilebilen şeyleri tanımlamaktır.

İlk örnek: Yöntemleri değiştirin

class Employee
  if String.method_defined?(:encode)
    def name
      ...
    end
  else
    def name
      ...
    end
  end
end

Bu örnekte, yöntem için iki farklı tanım vardır name. Biri String.encodeyöntem varsa kullanılacak ve bir (alt uygulama) kodlama yöntemi yoksa kullanılacaktır. Temel olarak, bu, kütüphaneler destekliyorsa doğru kodlanmış bir dize kullanmanızı sağlar.

İkinci örnek: Uygulamayı değiştirin

if String.method_defined?(:encode)
  module Builder
    ...
  end
else
  class String
    ...
  end
end

Bu örnekte, bir kütüphane özelliğinin bulunup bulunmamasına bağlı olarak tamamen farklı bir sınıf / modül sağlıyoruz. Bu, yeni bir kütüphane özelliği kullanan tamamen farklı bir algoritmaya sahip olmanıza izin verirken, hala yoksa daha az verimli veya tam bir algoritmaya geri döner.

Hepsi önemli neden

Peki bu size ne alıyor? İfade ifyeni bir kapsam getirmişse, yeni yöntem veya sınıf yalnızca ififadenin sınırları dahilinde var olur ve kullanılır . Bu kısıtlama, gelecekte 1.9'dan uzaklaşacağımız için Ruby 2.0 için değişikliklere ihtiyaç duyacak bir kütüphaneyi desteklemeyi çok zorlaştırıyor.

Bağlandığınız sunuda sağlanan her iki örnekte de, akıl yürütme, Ruby'nin birden çok sürümünü desteklerken kütüphaneleriniz için bir kod tabanı korumaktır. Ruby 1.8 ve Ruby 1.9 arasında geçiş acısından doğduğuna inanıyorum. Ruby ekibi sürekli olarak 2.0'a doğru yürüdüğünden, uyumsuz değişiklikler olduğunda kullanıcılarınızı desteklemeye devam edebileceksiniz. 1.9.1 ila 1.9.2 arasında olduğuna inanıyorum. Gelecekte daha fazlası olacak.


1

Ben uzman değilim, ama burada Ruby SSS bölümüne bakarsanız: http://arc.apotheon.org/ruby/faq/rubyfaq-2.php

Bölüm 2.3 "Yerel bir değişken ne zaman erişilebilir hale gelir?" geçerli davranışı gösterir.

Kapsam belirleme sorununu aşmak için, şu anda yapmanız gereken biraz "hileli" şeylerden biri:

Yerel değişkenlerin bu tür davranışlarından rahatsız olmamaları için yerel bir değişkene erişmeden önce a = nil gibi bir atama ifadesi koymanız önerilir.

Ben inanıyorum 1.9 Bunu yapmak gereğini kaldırır, ve bu yeni davranış için sürücülerin biri olabileceği.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.