gpt4 book ai didi

ruby - 最佳实践 : Creating a module with expectation of type its included in?

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

当在 Ruby 中定义模块时,我看到了一些示例,其中模块期望它要包含的类具有特定的定义和功能。

例如,模块可能会调用一个本身不包含期望其包含的类包含该方法定义的方法。

对我来说,这与我的强类型语言背景不同,后者缺乏包含任意逻辑集的能力(就此而言,Ruby 作为一个整体是完全不同的范例)。

根据 ruby​​ 标准,这是一种可以接受的样式,还是至少在成熟的代码库中经常看到,被认为是“好的”?

我意识到这是一个有点主观的问题,但是我想看看这是否经常发生,以至于如果他们要构建这样的模块,是否会在“规范”范围内考虑。

最佳答案

由于Ruby 的类型非常松散,更多地依赖于响应方法的能力,即所谓的duck typing ,比起类(class),这些事情很难承担责任。

如果您的模块包含在不兼容的上下文中,作为模块,您无权对此采取任何措施。您无法提前知道任何给定的方法调用是成功还是失败,因为在包含您的模块之后可能会发生其他事情,这会使进行某种验证为时过早。

考虑到这些限制,重要的是尝试构建事物以避免这种歧义。

Enumerable举个例子。为了使其在包含时能够正常工作,必须在包含它的上下文中定义许多方法。如果没有定义这些,模块将无法工作,但导致此失败的责任不是 Enumerable,而是包含它的模块。

基本上,在您include SomeModule 之前,您应该确定满足包含该模块的依赖项(如果有的话)。作为包含者,您还对由此可能导致的任何冲突承担全部责任。

其他语言有更严格的方法来验证完整性,例如 Objective C 的协议(protocol)功能或 C++ 中基类的存在。由于 Ruby 没有这个,为了确保一切正常工作,采用了自动化测试套件。您可能会注意到 Ruby 社区非常注重测试,而这种歧义是造成这种情况的众多原因之一。

关于ruby - 最佳实践 : Creating a module with expectation of type its included in?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349725/

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