谁能告诉我两者之间的区别(如果有的话)
class Car
attr_accessor :engine
def initialize(engine)
self.engine = engine
end
end
Run Code Online (Sandbox Code Playgroud)
和
class Car
attr_reader :engine
def initialize(engine)
@engine = engine
end
end
Run Code Online (Sandbox Code Playgroud)
或者它们几乎相同?
Aru*_*hit 12
attr_accessor定义getter和setter.attr_reader仅定义getter.
class Car
attr_reader :engine
def initialize(engine)
@engine = engine
end
end
Car.instance_methods(false) # => [:engine]
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,您只能定义def engine; @engine ;end.
class Car
attr_accessor :engine
def initialize(engine)
self.engine = engine
end
end
Car.instance_methods(false) # => [:engine, :engine=]
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,您只定义def engine; @engine ;end和def engine=(engine) ;@engine = engine ;end.
attr_accessor :engine允许您读取和写入变量@engine。
attr_reader :engine只允许你读取@engine 的值
self.engine = engine和@engine = engine几乎做同样的事情。