这段代码中attr:str的用途是什么

时间:2018-12-08 15:28:09

标签: ruby

此处代码显示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

无法理解第3行中attr的用法,甚至我也知道attr_accessor

2 个答案:

答案 0 :(得分:4)

attr_accessor :str在类中定义了2个方法:strstr=attr :str仅定义一个:strattrattr_reader是同一件事。

答案 1 :(得分:3)

这是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


attrattr_reader的形式在您的代码attr :str中使用。

以下是在类的实例中使用的示例:

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

无法为@str的实例更改实例变量(attr)SizeMatters


如果用作attr: :str, true,则与attr_accessor相同,但已被弃用
作为参考,请在此处查看:https://ruby-doc.org/core-2.5.0/Module.html#method-i-attr