gpt4 book ai didi

ruby - 这些 Ruby 命名空间约定之间有什么区别?

转载 作者:数据小太阳 更新时间:2023-10-29 06:23:42 24 4
gpt4 key购买 nike

因此 Module 可以在 Ruby 中用于提供命名空间以及混入,如下所示:

module SomeNamespace
class Animal

end
end

animal = SomeNamespace::Animal.new

但我也看到了以下使用:

module SomeNamespace
end

class SomeNamespace::Animal

end

animal = SomeNamespace::Animal.new

我的问题是它们有何不同(如果有的话)以及哪个更符合 Ruby 的习惯?

最佳答案

区别在于嵌套。

在下面的示例中,您可以看到使用类 Foo 的前一种方法可以无误地获取外部作用域的常量变量 BAR_A。

与此同时,Baz 类将出现未初始化常量 A::B::Baz::BAR_A 错误。因为它不会隐式地引入 A::*,所以只会显式地引入 A::B::*。

module A
BAR_A = 'Bar A!'
module B
BAR_B = 'Bar B!'
class Foo
p BAR_A
p BAR_B
end
end
end

class A::B::Baz
p BAR_A
p BAR_B
end

这两种行为都有它们的位置。在我看来,对于哪一个是 One True Ruby Way (tm),社区中并没有真正的共识。我个人大部分时间都使用前者。

关于ruby - 这些 Ruby 命名空间约定之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821459/

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