此处代码显示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
。
答案 0 :(得分:4)
attr_accessor :str
在类中定义了2个方法:str
和str=
。 attr :str
仅定义一个:str
。 attr
和attr_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
attr
以attr_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
相同,但已被弃用。