Nasıl Ruby global değişken veya sabit değerler kullanıyor musunuz?
Görünüşe göre bir program var:
$offset = Point.new(100, 200);
def draw(point)
pointNew = $offset point;
drawAbsolute(point)
end
draw(Point.new(3, 4));
$offset
kullanmak biraz garip geliyor.
Ben herhangi bir fonksiyon dışında bir şey tanımlarsanız C, global bir değişken otomatik olarak. Neden Ruby $offset
ancak offset
olmak zorunda mı ve hala küresel olacak? Eğer offset
, Daha sonra ise bir yerel değil mi? Ama yerel çok genel bir duygu çünkü nerede.
Yukarıdaki kod yazmak için daha iyi bir yolu var mı? $offset
kullanımı ilk başta biraz çirkin görünebilir.
Güncelleme: bu class
bir tanımı içinde mahsup koyabilirim, ama eğer iki veya daha fazla sınıflar için bir şey olsa bile ne bu sürekli? Bu durumda ben hala $offset
tanımlamak gerekir?
CEVAP
Ruby'de değişken kapsamı, bir dereceye kadar mühür tarafından kontrol edilir. Değişkenleri $
genel, @
deÄŸiÅŸkenler, @@
sınıf değişkenleri anlamı örnek ve isimleri büyük harfle başlayarak sabitler. Diğer tüm değişkenler yerli. Bir sınıf veya yöntem açtığınızda, yeni bir kapsam ve yerli bir önceki kapsamındaki mevcut değil.
Ben genellikle global değişkenler oluşturma önlemek için tercih. Temizleyici olarak görüyorum genel olarak aynı amaca ulaşmak için iki teknik vardır:
Bir modülde bir sabit oluşturmak. Bu durumda, modül
Foo
mahsup veOffset
, o zaman tüm sınıflarıFoo::Offset
erişebilecek bir sabit oluşturmak için gereken tüm sınıfları koyabilirsiniz.Değeri erişmek için bir yöntem tanımlamak. Bu yöntem genel olarak tanımlayabilirsiniz, fakat yine de, daha iyi bir modül veya sınıf içinde saklanması için olduğunu düşünüyorum. Bu şekilde veri nerede mevcut olduğunu ve hatta eğer gerekiyorsa bunu değiştirebilirsiniz, ama bu program ve verilerin sahiplik yapısını daha net olacak. Bu nesneye yönelik tasarım ilkeleri doğrultusunda daha fazla.
Nasıl PHP bir karma parolalar için bcr...
Nasıl değişken olup olmadığını belirle...
Nasıl Ruby alt veya üst durumda bir di...
Nasıl NSAttributedString kullanıyor mu...
Nasıl Ruby ile min / maks buluyor musu...