В Ruby, должны ли переменные экземпляра (класса) быть сначала определены в "initialize", прежде чем он будет работать? - PullRequest
1 голос
/ 24 августа 2010
class Shape
    def initialize()
        @blah = ""
    end
end

ИЛИ ... это будет работать?

class Shape
    @blah = ""
    def initialize()

    end
end

Кроме того, по умолчанию переменные экземпляра являются открытыми или закрытыми?Как вы устанавливаете их как публичные или частные?

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Ваш второй пример инициализирует @blah как переменную класса. Он не будет напрямую доступен (для него потребуется средство доступа к классу) и будет одинаковым для всех экземпляров класса.

Переменные экземпляра по своей природе являются закрытыми, хотя вы можете получить к ним доступ с помощью @foo.instance_variable_get("@blah"). Традиционно, если вы хотите получить доступ к переменной экземпляра @blah, вы должны добавить средство доступа.

class Shape
  attr_accessor :blah
end

Это позволило бы вам сказать, например, shape = Shape.new; shape.blah = "whee"; puts shape.blah (и вы получите "whee").

1 голос
/ 24 августа 2010

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

class Something
  @var = 10
end

Это относится к переменной экземпляра класса Something , а не к переменной экземпляра какого-либо экземпляра Something. Только не забудьте ссылаться на переменные экземпляра вне методов экземпляра.

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