attr_accessor是否需要在Ruby中使用符号作为变量?

时间:2014-01-19 21:38:27

标签: ruby attr-accessor

我见过的attr_accessor s的每个例子都使用符号(:var)作为变量。

这是否需要使用attr_accessor,如果是,为什么?如果没有,为什么这是一种常见的做法?

2 个答案:

答案 0 :(得分:2)

Module#attr_accessor

  

attr_accessor(symbol,...)→nil

     

attr_accessor(string,...)→nil (在Ruby 2.1中新引入)

     

为此模块定义命名属性,其名称为symbol.id2name,创建实例变量(@name)以及相应的访问方法以读取它。还创建一个名为name =的方法来设置属性。 字符串参数将转换为符号。


  

这是否需要使用attr_accessor?

不,你可以使用符号和字符串。

阅读本文 - Understanding Ruby symbol as method call

答案 1 :(得分:2)

当前版本的ruby(2.1)permits passing a string(如@ArupRakshit所述),旧版本的ruby did not(2.0及更早版本)。因此,任何不依赖于ruby 2.1的代码(几乎都是所有代码)都需要传递符号。

除此之外,在大多数情况下,你想要无论如何都要传递符号,因为它们是原子符号,开销较少,并且在语义上更符合属性定义而不是字符串。