我见过的attr_accessor
s的每个例子都使用符号(:var
)作为变量。
这是否需要使用attr_accessor
,如果是,为什么?如果没有,为什么这是一种常见的做法?
答案 0 :(得分:2)
attr_accessor(symbol,...)→nil
attr_accessor(string,...)→nil (在Ruby 2.1中新引入)
为此模块定义命名属性,其名称为symbol.id2name,创建实例变量(@name)以及相应的访问方法以读取它。还创建一个名为name =的方法来设置属性。 字符串参数将转换为符号。
这是否需要使用attr_accessor?
不,你可以使用符号和字符串。
答案 1 :(得分:2)
当前版本的ruby(2.1)permits passing a string(如@ArupRakshit所述),旧版本的ruby did not(2.0及更早版本)。因此,任何不依赖于ruby 2.1的代码(几乎都是所有代码)都需要传递符号。
除此之外,在大多数情况下,你想要无论如何都要传递符号,因为它们是原子符号,开销较少,并且在语义上更符合属性定义而不是字符串。