1

例如,在Foggem的代码片段中,例如

require 'rubygems'
require 'fog'

# create a connection to the service
dns = Fog::DNS.new({
  :provider     => 'Zerigo',
  :zerigo_email => ZERIGO_EMAIL,
  :zerigo_token => ZERIGO_TOKEN
})


zone = @dns.zones.create(
  :domain => 'example.com',
  :email  => 'admin@example.com'
)

为什么dns一开始不是实例变量,而是在下一段变成了实例变量?为什么zone不是实例变量?

4

1 回答 1

1

这通常发生在使用属性读取器/写入器时,如attr_reader, attr_writer, attr_accessor。这些宏创建一个实例变量,并分别为它公开一个“getter”方法、“setter”方法或两者。在实例方法中,实例变量总是可以访问的。

关于示例中使用的具体代码,它似乎dns是一个标准的局部变量。如果它实际上是一个属性访问器,它应该被写成:

self.dns = Fog::DNS.new({...

因为属性访问器实际上是一个方法,而不是一个局部变量。因此,您可以正确地说它在被声明为局部变量后不能简单地“成为”实例变量,并且当前的示例代码是对现实世界使用的不准确表示。

于 2013-03-20T14:48:31.523 回答