какая польза от `attr: str` в этом коде - PullRequest
0 голосов
/ 08 декабря 2018

здесь код показывает attr :str.для чего он нужен и как работает этот код?

  class SizeMatters
    include Comparable
    attr :str

    def <=>(anOther)
      str.size <=> anOther.str.size
    end

    def initialize(str)
      @str = str
    end

    def inspect
      @str
    end

  end

не могу понять использование attr в строке 3. Даже я знаю о attr_accessor.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Это список методов доступа в Ruby:

attr_reader :var
# has the effect of:
def var
  @var
end

attr_writer :var
# has the effect of:
def var=(value)
  @var = value
end

attr_accessor :var
# has the effect of:
attr_reader :var
attr_writer :var


attr работает как attr_readerв форме, используемой в вашем коде: attr :str.

Вот пример использования в экземпляре класса:

sm = SizeMatters.new('hello')
sm.str #=> "hello"
sm.str = 'hi' #=> undefined method `str=' for hello:SizeMatters

Невозможно изменить переменную экземпляра (attr) @str для экземпляра SizeMatters


Если используется как attr: :str, true, работает как attr_accessor, но устарело .
Для справки проверьте здесь: https://ruby -doc.org / core-2.5.0 / Module.html # method-i-attr
0 голосов
/ 08 декабря 2018

attr_accessor :str определяет 2 метода в классе: str и str=.attr :str определяет только одно: str.attr и attr_reader - это одно и то же.

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