Pet*_*own 5 ruby inheritance namespaces
使用命名空间类而不是模块是否有效和/或可接受?也许这只是一个意见问题,但我认为有人可能有这方面的经验,可以肯定地说这是否是一种公认的做法.
以下面的类为例:
class Parent
end
class Parent::Child1 < Parent
end
class Parent::Child2 < Parent
end
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码是有效的,但是对于命名空间使用类而不是模块似乎很奇怪.我想将父类名添加到子类的原因是因为我计划拥有大量子类并希望避免名称冲突.例如:
class Priority
end
class Priority::Low < Priority
end
class Temperature
end
class Temperature::Low < Priority
end
Run Code Online (Sandbox Code Playgroud)
替代方法是不使用名称空间,只使用父名称作为子类名称的一部分:
class PriorityLow < Priority
end
Run Code Online (Sandbox Code Playgroud)
在Ruby中有命名空间的最佳实践吗?
更新:
@sawa在下面问了一些例子.这是我构建的一个名为classy_enum的Gem,它允许用户定义属于Enum类型成员的类.查看示例用法部分,了解更多背景信息.我正在清理代码库,我发现我建议的命名方案可以改进.所以不使用PriorityLow,你可以使用Priority::Low(或任何最有意义的,但我倾向于后者)
我没有明确的答案,但似乎值得注意的是Ruby Class类是它的子类Module,这对我来说意味着Class是一种类型的模块,这表明做你想做的事情可能是合理的.我当然看不出有任何理由可以避免它,但我很想知道是否有人想出任何潜在的缺点.
| 归档时间: |
|
| 查看次数: |
1595 次 |
| 最近记录: |