Вызов методов доступа к атрибутам из класса - PullRequest
4 голосов
/ 23 февраля 2009

Я пытаюсь получить вызов одним из моих авторов атрибутов классов, но по какой-то причине он никогда не вызывается. Вот некоторый код, который сделает это более понятным:

class Test
  attr_reader :test

  def test=(val)
    puts 'Called'
    @test = val
  end

  def set_it(val)
    test = val
  end
end

obj = Test.new
obj.set_it 5
puts obj.test
=> nil

Оператор put в конце выводит 'nil'. Добавление оператора отладки в test = показывает, что он никогда не вызывается. Что я делаю не так?

Обновление

Я переписал этот вопрос частично, так как я не совсем понял проблему, когда писал ее. Так что теперь вопрос гораздо более обобщен.

Ответы [ 2 ]

8 голосов
/ 23 февраля 2009

Вы ничего не делаете "неправильно" как таковое. Ruby просто думает, что вы намерены установить для локальной переменной test значение val, а не вызывать метод test=. self.test = val будет делать то, что вы ожидаете.

0 голосов
/ 14 марта 2009

Вот некоторые другие ресурсы по этой (очевидно распространенной) проблеме:

Другой вопрос переполнения стека: Зачем сеттерам рубина нужна квалификация «я» внутри класса?

Из этого блога парней :

Как новичок в Ruby, вы, вероятно, однажды сделали race = "hooman", но заметили, что это не сработало, и сказали себе: «Я не позволю этому случиться со мной снова. С этого момента я буду добавлять self. всякий раз, когда вызываю метод! ”

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...