2010-05-07 2 views
0

дал этот код:рубин порядок разбора

class Foo 
    def bar 
    return Bar.new 
    end 
end 

class Bar 
    ... 
end 

Я получаю эту ошибку:

NameError: uninitialized constant Bar 

Это, очевидно, работает, если я ставлю перед тем Bar Foo, но это не является реальным решением, хотя.

Любые идеи о том, как решить это, не учитывая порядок?

Большое спасибо.

UPDATE:

Конечно ошибка возникает только при вызове Foo.new.bar и не при определении.

+5

Это не дает мне эту ошибку. Конечно, вы не можете называть 'Foo.new.bar' до того, как вы определите« Бар », но просто определение метода должно работать нормально. –

+0

Да, вы правы. Это то, что я на самом деле оцениваю – 2010-05-07 20:21:16

ответ

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> 
+0

+1 для полноты тестовых сред – pilcrow

+0

Вы абсолютно правы. Я не могу воспроизвести ошибку сейчас после внесения некоторых изменений в мой код. Но я был убежден, что это связано с определением порядка, поскольку я думал, что однажды испытал один и тот же вопрос. Моя ошибка ... за то, что вы не расследуете до публикации. – 2010-05-07 21:25:23

Смежные вопросы