gpt4 book ai didi

ruby - 什么时候使用嵌套类和嵌套在模块中的类?

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

我非常熟悉何时使用子类和模块,但最近我看到了这样的嵌套类:

class Foo
class Bar
# do some useful things
end
end

以及像这样嵌套在模块中的类:

module Baz
class Quux
# more code
end
end

要么是文档和文章稀少,要么是我在该主题方面的知识不足以摸索正确的搜索词,但我似乎无法找到关于该主题的太多信息。

有人可以提供有关为什么/何时使用这些技术的示例或帖子链接吗?

最佳答案

其他 OOP 语言有 inner classes如果不绑定(bind)到上层类就无法实例化。例如,在 Java 中,

class Car {
class Wheel { }
}

只有 Car 类中的方法可以创建 Wheel

Ruby 没有这种行为。

在 ruby 中,

class Car
class Wheel
end
end

不同于

class Car
end

class Wheel
end

仅在类 WheelCar::Wheel 的名称中。这种名称上的差异可以向程序员明确表示 Car::Wheel 类只能表示汽车轮子,而不是一般的轮子。在 Ruby 中嵌套类定义是一个偏好问题,但从某种意义上说,它服务于一个目的,即它更强烈地强制执行两个类之间的契约,并在这样做时传达有关它们及其用途的更多信息。

但对于 Ruby 解释器来说,这只是名称上的不同。

关于您的第二个观察,嵌套在模块内部的类通常用于为类命名。例如:

module ActiveRecord
class Base
end
end

不同于

module ActionMailer
class Base
end
end

虽然这不是嵌套在模块内部的类的唯一用途,但它通常是最常见的。

关于ruby - 什么时候使用嵌套类和嵌套在模块中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195661/

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