Почему я могу получить доступ к закрытым / защищенным методам, используя Object # send в Ruby?
Класс
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
экземпляр Аa = A.new
тестовое задание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
тестовый выводfail
bar
fail
fail
fail
. отправить тест[:foo, :bar, :zim, :dib, :gaz].each { |m| a.send(m) rescue puts :fail }
. отправить выводfoo
bar
zim
dib
fail
ВопросРаздел с пометкой «Результат теста» является ожидаемым результатом. Так почему я могу получить доступ к закрытому / защищенному методу, простоObject#send
?
В чем разница междуpublic
/private
/protected
в рубине? Когда использовать каждый? Может ли кто-нибудь привести примеры из реальной жизни?private
а такжеprotected
использование?