Вызов метода защищенного класса из метода экземпляра в Ruby
У меня была эта беспокоящая повторяющаяся тема; позвольте мне просто сказать, что у меня есть класс, который определяет метод экземпляра и метод защищенного класса. Метод экземпляра должен вызывать метод класса. Чтобы сделать это, мне нужно нарушить правило видимости и использовать опасный «отправить». функция. Что-то вроде этого:
class Bang
def instance_bang
self.class.send(:class_band)
end
protected
def self.class_bang
puts "bang"
end
end
Я нахожу это ужасным, поскольку метод класса должен использоваться внутри области видимости класса, поэтому должен оставаться видимым и вызываться внутри него, верно? Существует ли альтернативный способ использования методов класса в методах экземпляра, при котором необходимо полагаться на «отправить»? функция и, следовательно, не нарушать видимость?
ОБНОВИТЬ:
Следуя ответу Серджио Туленцева (спасибо за исправление), я обновлю свою озабоченность фрагментом кода, который суммирует мои опасения по поводу видимости метода, принимаемого во внимание, в то же время находясь внутри области, где он был определен.
class Bang
def instance_bang
private_bang = 1
self.private_bang(private_bang)
end
private
def private_bang(p)
puts "bang"
p
end
end
Вызов Bang.new.instance_bang вызовет исключение, если вы не используете send для этого вызова private_bang (на этот раз я проверил это :)).