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_readerattr_writerますattr_accessor。これらのマクロはインスタンス変数を作成し、それぞれ「getter」メソッド、「setter」メソッド、またはその両方を公開します。インスタンスメソッド内では、インスタンス変数に常にアクセスできます。

例で使用されている特定のコードに関してdnsは、標準のローカル変数であるように見えます。それが実際に属性アクセサーである場合は、次のように記述されている必要があります。

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

属性アクセサーは実際にはメソッドであり、ローカル変数ではないためです。したがって、ローカル変数として宣言された後、単にインスタンス変数になることはできず、現在のサンプルコードは、実際の使用を不正確に表現していると言うのは正しいでしょう。

于 2013-03-20T14:48:31.523 に答える