@Fly3110
web developer

В чем отличие вызова self.method от просто method из экземпляра класса в руби?

Всем привет.

В классе определен приватный метод method
Если я его вызываю из публичного метода экземпляра этого же класса в виде self.method, то получаю ошибку (Private method `method' called ). Если же я пишу просто method, то все работает.

По логике я вижу, что self.method вызывает этот метод "снаружи" класса, но хотелось бы в документации прочитать. Сам не нашел поиском.

Пример кода:

class Entity
    def do_something
       private_method
    end

    def do_something2
        self.private_method
    end

    private
    def private_method
        puts 'works'
    end
end

entity = Entity.new
entity.do_something
entity.do_something2


вывод:

works
1.rb:7:in `do_something2': private method `private_method' called for #<Entity:0x007f93c0003358> (NoMethodError)
Did you mean?  private_methods
	from 1.rb:18:in `<main>'


Заранее спасибо.
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
LightAlloy
@LightAlloy
Ruby developer
Да, приватный метод нельзя вызывать через явное обращение к классу, даже если это self.
> A private method cannot be called with an explicit receiver at all, even if that receiver is “self”.
https://en.wikibooks.org/wiki/Ruby_Programming/Syn...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы