6

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

这是使用的要求attr_accessor吗?如果是,为什么?如果不是,为什么会如此普遍?

4

2 回答 2

3

Module#attr_accessor

attr_accessor(symbol, ...) → nil

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

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


这是使用 attr_accessor 的要求吗?

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

阅读这篇文章 -将 Ruby 符号理解为方法调用

于 2014-01-19T21:40:03.057 回答
2

虽然当前版本的 ruby​​ (2.1)允许传递字符串(如 @ArupRakshit 所述),但旧版本的 ruby​​ 不允许(2.0 和更早版本)。因此,任何不依赖 ruby​​ 2.1 的代码(几乎就是所有代码)都需要传递符号。

除此之外,在大多数情况下,无论如何您都希望传递符号,因为它们是原子的,开销较小,并且在语义上比字符串更符合属性定义。

于 2014-01-19T21:50:46.490 回答