Ruby解析顺序

时间:2010-05-07 18:29:16

标签: ruby parsing

给出这段代码:

class Foo
  def bar
    return Bar.new
  end
end

class Bar
  ...
end

我收到此错误:

NameError: uninitialized constant Bar

如果我把Bar放在Foo之前​​,这显然有效,但这不是一个真正的解决方案。

有关如何在不考虑订单的情况下解决此问题的任何想法?

非常感谢。

更新

当然,只有在调用Foo.new.bar而不是在定义时才会发生错误。

1 个答案:

答案 0 :(得分:3)

安装Ruby时一定有问题。它不应该给出错误消息。我检查了ISO Ruby规范和RubySpec,我也复制了&粘贴你发布到JRuby 1.6.0.dev,JRuby 1.5.0RC3,IronRuby 1.0,YARV 1.9.1-p378,MRI 1.8.7-p249,Rubinius 0.11.0-dev,YARV-1.9.1-p129的代码, MRI 1.8.7-p174,MRI 1.8.6-p369,MRI 1.7.1,MRI 1.6.0,MRI 1.5.0,MRI 1.4.0,MRI 1.3,MRI 1.2甚至MRI 1.0(一路回到1997)我没有得到那个错误:

class Foo
  def bar
    return Bar.new
  end
end

class Bar
end

puts Foo.new.bar # => #<Bar:0x823f638>