无法执行实例变量

时间:2012-08-12 12:59:58

标签: ruby

我正在尝试学习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 method hello'for#<Instance:0xf09fa8 @hello="hello">(NameError)

         
      

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

    
  

上述相同的程序对局部变量工作正常,如果我从hello中删除@符号。

2 个答案:

答案 0 :(得分:4)

毫无疑问是愚蠢的。您正在为实例变量赋值,但是您正在调用下面的局部变量(或方法)。

@hello是一个实例变量,它在一个实例的范围内可用,它与hello不同,后者是一个局部变量。

以下是关于instancelocal变量的精彩读物。

答案 1 :(得分:0)

以下是两种有效的解决方案:

首先,使用Accessors作为实例变量(第二行):

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()