gpt4 book ai didi

ruby-on-rails-3 - 在模块内引用常量时的不一致行为

转载 作者:行者123 更新时间:2023-12-02 02:14:35 26 4
gpt4 key购买 nike

在我的 Rails 3.2 模型目录中,我有一个包含两个类的文件夹“foo”:

# foo/bar.rb
class Foo::Bar; end

# foo/baz.rb
class Foo::Baz
def self.test
puts Bar.to_s
end
end

请注意,Foo::Baz.test 将 Foo::Bar 简单地引用为 Bar,因为 Bar 和 Baz 在同一模块中。

然后我打开控制台并调用 Foo::Baz.test 两次:

1.9.3-p0 :001 > Foo::Baz.test
Foo::Bar
=> nil
1.9.3-p0 :002 > Foo::Baz.test
NameError: uninitialized constant Foo::Baz::Bar
from /../app/models/foo/baz.rb:2:in `test'

如您所见,第一次调用工作正常,此后每次都崩溃。为什么?

如果 Foo::Baz 使用完全限定名称 Foo::Bar 而不仅仅是 Bar,这不会发生。

最佳答案

如果您单独声明模块,它似乎可以工作:

# foo/bar.rb
module Foo
class Bar; end
end

# foo/baz.rb
module Foo
class Baz
def self.test
puts Bar.to_s
end
end
end

$ rails console
Loading development environment (Rails 3.2.6)
1.9.3-p125 :001 > Foo::Baz.test
Foo::Bar
=> nil
1.9.3-p125 :002 > Foo::Baz.test
Foo::Bar
=> nil
1.9.3-p125 :003 >

我无法解释为什么。

关于ruby-on-rails-3 - 在模块内引用常量时的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11179737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com