Рубиновый порядок разбора - PullRequest
0 голосов
/ 07 мая 2010

с учетом этого кода:

class Foo
  def bar
    return Bar.new
  end
end

class Bar
  ...
end

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

NameError: uninitialized constant Bar

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

Есть идеи, как решить эту проблему без учета заказа?

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

UPDATE:

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

1 Ответ

3 голосов
/ 08 мая 2010

Должно быть что-то не так с вашей установкой 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, МРТ 1.2 и даже МРТ 1.0 (вплоть до 1997 года), и я не получил эту ошибку:

class Foo
  def bar
    return Bar.new
  end
end

class Bar
end

puts Foo.new.bar # => #<Bar:0x823f638>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...