0

Ruby言語でインスタンス変数を学ぼうとしています。ですから、これがばかげた質問である場合はご容赦ください。

class Instance
  def method1
    @hello = "hello"
    p hello
  end
  Instance.new.method1()
end

上記のプログラムを実行しようとすると、次のエラーが表示されます

C:\Documents and Settings\Sai\Desktop\RubySamples>ruby Instance.rb
Instance.rb:4:in method1': undefined local variable or methodhello' for # <Instance:0xf09fa8 @hello="hello">(NameError)

from Instance.rb:6:in '<class:Instance>'
from Instance.rb:1:in

上記の同じプログラムは、ローカル変数に対して正常に機能しています。つまり、hello から @ 記号を削除した場合です。

4

2 に答える 2

4

愚かなことはありません。インスタンス変数に値を割り当てていますが、以下ではローカル変数 (またはメソッド) を呼び出しています。

@helloはインスタンスのスコープで使用できるインスタンス変数でありhello、ローカル変数とは異なります。

これは、インスタンス変数とローカル変数に関する素晴らしい読み物です。

于 2012-08-12T13:12:02.897 に答える
0

機能する2つのソリューションを次に示します。

まず、インスタンス変数にアクセサーを使用します (2 行目):

class Instance
  attr_accessor :hello
  def method1
    @hello = "hello"
    p hello
  end
  Instance.new.method1()
end

次に、インスタンス変数を直接使用します。

class Instance
  def method1
    @hello = "hello"
    p @hello
  end
  Instance.new.method1()
end

1 つの追加のアイデア: クラス定義の外でメソッドを呼び出します。

class Instance
  def method1
    @hello = "hello"
    p @hello
  end
end
Instance.new.method1()
于 2012-08-12T15:05:01.347 に答える