Die Klasse
class A
private
def foo
puts :foo
end
public
def bar
puts :bar
end
private
def zim
puts :zim
end
protected
def dib
puts :dib
end
end
Instanz von A
a = A.new
Test
a.foo rescue puts :fail
a.bar rescue puts :fail
a.zim rescue puts :fail
a.dib rescue puts :fail
a.gaz rescue puts :fail
Testausgabe
fail
bar
fail
fail
fail
.send test
[:foo, :bar, :zim, :dib, :gaz].each { |m| a.send(m) rescue puts :fail }
.send Ausgabe
foo
bar
zim
dib
fail
Die Frage
Der Abschnitt mit der Bezeichnung "Testausgabe" ist das erwartete Ergebnis. Warum kann ich also auf eine private/geschützte Methode zugreifen, indem ich einfach Object#send
?
Vielleicht noch wichtiger:
Was ist der Unterschied zwischen public
/ private
/ protected
in Ruby? Wann sollte man sie verwenden? Kann jemand Beispiele aus der Praxis geben für private
y protected
Verwendung?