bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Вызов приватных методов?

Здравствуйте. Подскажите пожалуйста, что-то никак не могу разобраться. Приватный метод для записи отрабатывает все нормально, а приватный метод для чтения вызывает ошибку?

test.rb:8:in `read': private method `session_lang' called for #<Tst:0x000000000302e4e8>


class Tst

  def write
    self.session_lang = 'ru'
  end

  def read
    self.session_lang
  end

  private

  def session_lang
    p 'read'
  end

  def session_lang= (value)
    p 'write'
  end
end

tst = Tst.new
tst.write
tst.read


Если вызывать для метод чтение без self, то он работает

def read
    self.session_lang
  end


Если вызывать метод для записи без self, тогда вызывается не метод, а просто переменной присваивается значение

def write
    session_lang = 'ru'
  end


Просто в реальном кейсе, у меня что-то наподобие, но когда методы приватные, то ошибка

def write
    self.session_lang ||= 'ru'
  end


Спасибо.
  • Вопрос задан
  • 432 просмотра
Решения вопроса 1
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
потому что вы у объекта вызываете публичный метод, а его нет. И не важно, что self и текущий объект - одно и то же. Руби видит синтаксис вызова публичного метода, вызывает его и не находит, говорит что есть такой же, но приватный.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
Это нормальное поведение что методы на запись требуют self.
Именно для того что-бы такой херни как у вас не было.

Но т.к вызываються через self то приватные методы не доступны.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы