有谁能告诉我(如果有的话)
class Car
attr_accessor :engine
def initialize(engine)
self.engine = engine
end
end和
class Car
attr_reader :engine
def initialize(engine)
@engine = engine
end
end或者它们实际上是一样的?
发布于 2013-11-16 13:03:10
attr_accessor定义getter和setter,attr_reader只定义getter。
class Car
attr_reader :engine
def initialize(engine)
@engine = engine
end
end
Car.instance_methods(false) # => [:engine]使用上面的代码,您只定义了def engine; @engine ;end。
class Car
attr_accessor :engine
def initialize(engine)
self.engine = engine
end
end
Car.instance_methods(false) # => [:engine, :engine=]使用上面的代码,您只定义了def engine; @engine ;end和def engine=(engine) ;@engine = engine ;end。
发布于 2013-11-16 13:07:43
attr_accessor :engine允许您读写变量@engine。
attr_reader :engine只允许读取@engine的值
self.engine = engine和@engine = engine几乎做了同样的事情。
发布于 2021-08-22 06:51:07
他们是不一样的。
用代码来解释它
car = Car.new('cool engine')对读者来说,你只能阅读。
car.engine
# cool engine但你做不到
car.engine = 'even cool engine'对于attr_accessor,您可以同时进行读写
car.engine
# cool engine
car.engine = 'even cool engine'
car.engine
# even cool engine例如,变量
如果不想将实例变量公开给外部世界,只使用实例变量
class Car
# You don't need to use attr_reader and attr_accessor here if you don't want to expose them to outside world
def initialize(engine)
@engine = engine
end
endhttps://stackoverflow.com/questions/20018784
复制相似问题