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)

从 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

以下是两种可行的解决方案:

首先,对实例变量使用访问器(第二行):

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

另一个想法:我会在类定义之外调用该方法:

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