Neden Ruby hem özel hem de koruma yöntemleri var mı?
this article, okumadan önce access kontrol bu gibi Ruby çalıştı düşündüm:
public
- herhangi bir nesne (*3 örneğin*) tarafından erişilebilirprotected
- sadece nesnenin kendisi olarak, alt sınıfların içinden erişilebilirprivate
- aynı korunmalı, ama bu yöntem sınıfları yok
Ancak, öyle görünüyor ki protected
private
hareket aynı, dışında aslında bunu yapamazsın çağrı private
yöntemleri ile açık bir alıcı (yani self.protected_method
çalışır, ama self.private_method
gelmez).
Bu ne anlamı var? Ne zaman senin yöntemi denilen açık bir alıcı ile istemediğin bir senaryo var mı?
CEVAP
11* *yöntemleri tanımlama sınıf veya alt sınıflar her örneği tarafından çağrılabilir.
private
yöntemler sadece arama nesnenin içinden çağrılabilir. Başka bir örneği özel yöntemler doğrudan erişim yapamazsınız.
Burada hızlı pratik bir örnek:
def compare_to(x)
self.some_method <=> x.some_method
end
some_method
private
burada olamaz. Bu açık alıcıları destek olduğu için ** 16 yaşında olmalı. Tipik iç yardımcınız yöntemler genelde hiç böyle denmesini ihtiyacı olduğundan private
olabilir.
Önemli bu şekilde Java veya C eserlerden farklı olduğunu unutmayın. Ruby private
alt sınıfların yöntemi erişimi olan Java/C protected
benzer. Ruby'de private
gibi kendi sınıflarından bir yöntem erişimi sınırlamak için yolu Java yok.
Yakut görünürlüğünü büyük ölçüde bir "tavsiye" her zaman bir yöntemi kullanarak erişebilir beri neyse send
:
irb(main):001:0> class A
irb(main):002:1> private
irb(main):003:1> def not_so_private_method
irb(main):004:2> puts "Hello World"
irb(main):005:2> end
irb(main):006:1> end
=> nil
irb(main):007:0> foo = A.new
=> #<A:0x31688f>
irb(main):009:0> foo.send :not_so_private_method
Hello World
=> nil
Neden'Objective-C t özel yöntemle...
Ruby özel modül yöntemleri...
Nasıl özel yöntemleri, alanları veya i...
Neden Ruby Hariç => e `kurtarmak iç...
Neden't JUnit assertNotEquals yön...