ruby - `attr_accessor`/`attr_reader` 创建实例变量是什么意思?

标签 ruby instance-variables attr-accessor

attr_accessor 的文档明确地说它创建了一个实例变量:

[...] creating an instance variable (@name) and a corresponding access method [...]

attr_reader 的文档也是如此:

Creates instance variables and corresponding methods [...]

我理解第二部分,即 attr_accessorattr_reader 创建方法,但我不明白第一部分。

他们“创建实例变量”是什么意思?

最佳答案

这是文档中的错误/误导性措辞。 attr_reader/attr_accessor 本身不创建任何变量。他们怎么能它们在类实例生命周期之外工作。甚至读访问也不会使实例变量变得生动。只有写入权限才能创建它们。

class Foo
  attr_accessor :bar
end

foo = Foo.new
foo.instance_variables # => []
foo.bar # try read ivar
foo.instance_variables # => [], nope, not yet
foo.bar = 2 # write ivar
foo.instance_variables # => [:@bar], there it is

关于ruby - `attr_accessor`/`attr_reader` 创建实例变量是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44108924/

相关文章:

java - 方法返回 null [简单]

ruby-on-rails-4 - Rails4 : How to trigger the callback for attr_accessor while using accepts_nested_attributes_for

ruby - 将散列插入特定的数组位置

java - 在 Java 中如何使用变量?

ruby - 如何在循环的帮助下创建数组

ruby-on-rails - Rails 中的默认 getter 和 setter 是什么样子的?

ruby - ruby attr_accessor 的奇怪行为

ruby-on-rails - Rails fields_for 表单未显示

ruby-on-rails - Heroku ruby​​ buildpack 错误 - 未定义的局部变量或方法 `install_language_pack_gems'

ruby - 我如何判断哪些模块已混合到一个类中?