Доступ к переменной, созданной с помощью attr_accessor - PullRequest
4 голосов
/ 10 мая 2011

Я пытаюсь понять, что attr_accessor дает мне доступ.Насколько я понимаю, он предоставляет методы получения и установки.Так что attr_accessor :color это создаст для меня что-то вроде следующего

def color
  @color
end

def color=(value)
  @color = value
end

Я не понимаю, почему в следующем коде нельзя использовать color= в моем инициализаторе?(это заканчивается пустым).Почему мне нужно использовать @color= или self.color= вместо этого?Разве color= не должен быть способом вызова метода сеттера, который был только что создан для меня выше?

class Bird
  attr_accessor :color
  def initialize(c="green")
    color = c  # this doesn't work
    # either one of the following DOES work
    # @color = c
    # self.color = c
  end
end

puts Bird.new.color  # prints nothing unless using @color or self.color

1 Ответ

5 голосов
/ 10 мая 2011

Выражение типа color = "green" назначает "green" локальной переменной, не атрибуту.Установщики атрибутов всегда нуждаются в приемнике, даже если получатель self.

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