论坛首页 Ruby版 ruby

关于实例变量初始化的请教

浏览 242 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-04-29 关键字: 实例变量
大家好,我写了如下的测试代码:
------------------------------------
class Person

  puts "step 0"
  @aaa = Array.new
  @aaa << 1
  puts "step 1"
  
  def initialize

	puts "step 2"
	
  	@aaa << 2
    
  end
 
  def doSomething
      puts "step 3"
	  @aaa<< 3
      @aaa.each { |item|
      	# puts item
      }
  end
end


person=Person.new()

person.doSomething

------------------------------------

结果发现走到step 2的“@aaa <<2”时提示出错。信息如下:
step 0
step 1
step 2
test.rb:12:in `initialize': undefined method `<<' for nil:NilClass (NoMethodError)
from test.rb:26:in `new'
from test.rb:26

在Step 0和Step 1之间不是已经执行了@aaa = Array.new么?为什么还会输出错误呢?
我发现在initialize中写@aaa = Array.new就没有问题了,其原理哪位高人可否给指点一二?
   
时间:2008-04-29
Person.class_eval {@aaa}
   
0 请登录后投票
时间:2008-04-29
def initialize

puts "step 2"

@aaa << 2

end

初始化的时候,新建的person对象何来@aaa实例变量?

你的第一个写的@aaa = Array.new 是Person class类对象的实例变量
   
0 请登录后投票
时间:2008-04-30
sina2009 写道
def initialize

puts "step 2"

@aaa << 2

end

初始化的时候,新建的person对象何来@aaa实例变量?

你的第一个写的@aaa = Array.new 是Person class类对象的实例变量


谢谢你的会带,我还有一点不太明白。
请问 Person Class类对象的实例不是person对象吗?
我觉得Person Class类在实例化(new)的时候应该会执行“第一个写的@aaa = Array.new”。
而且通过puts也发现了这点,但是为什么没有起作用呢?
可否再详细解惑一下,多谢了!
   
0 请登录后投票
时间:2008-05-01
xuteng935 写道
sina2009 写道
def initialize

puts "step 2"

@aaa << 2

end

初始化的时候,新建的person对象何来@aaa实例变量?

你的第一个写的@aaa = Array.new 是Person class类对象的实例变量


谢谢你的会带,我还有一点不太明白。
请问 Person Class类对象的实例不是person对象吗?
我觉得Person Class类在实例化(new)的时候应该会执行“第一个写的@aaa = Array.new”。
而且通过puts也发现了这点,但是为什么没有起作用呢?
可否再详细解惑一下,多谢了!

"而且通过puts也发现了这点..." -- 你多来几个person=Person.new()就会发现你的发现是个假象,所以要多做研究再来发问....
   
0 请登录后投票
论坛首页 Ruby版 ruby

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)