attr vs attr_accessor

0x4*_*672 21 ruby oop

Ruby中有实例变量的四个不同的getter和setter方法,attr,attr_reader,attr_writer,和attr_accessor.问题是,在Ruby中attr :dilithium,attr_reader :dilithiumattr_accessor :dilithium是否相同,如果传递了另外一个参数true则相同?也就是说

class Enterprise
  attr :dilithium, true
Run Code Online (Sandbox Code Playgroud)

相同

class Enterprise
  attr_accessor :dilithium
Run Code Online (Sandbox Code Playgroud)

有两个功能attr,并attr_accessor或多或少的冗余?

Lin*_*ios 29

一个区别是,attr_accessor朋友更清楚,attr现在不推荐使用可选的布尔参数.除此之外,attr没有文件的事实,没有真正的区别.

  • `attr`确实有文档,至少在2.3.0中.它只是`attr_reader`的别名.虽然,文档的组织方式非常差,但也许可以通过改进来使事情更清晰. (5认同)

ste*_*lag 7

在Ruby 1.8中,attr只能定义一个属性,可选择true创建一个setter.在1.9中,它表现得像attr_reader:它允许多个属性.正如@Linuxios所说,不推荐使用可选的布尔值.