ruby - 在 Ruby 中,是否可以将模块向上移动到祖先链?

标签 ruby

我有一个 Ruby 类 C,它包含一些第三方模块,比如 AB

模块 A 是通过 C 的类继承链间接包含的;假设我无法控制包含 A 的位置。现在,C 直接包含 B,但是 B 包含另一个模块 D,它恰好提供了同样提供的功能通过 A,像这样:

class C < Base

  # Base includes A

  include B   # includes D

  # methods in A overridden by D

end      

祖先链是这样的(其中 ... 代表零个或多个与此讨论无关的其他祖先):

C ... B ... D ... A 

我希望 A 的功能优先于 D:我想移动 A,使其位于 的前面D 在祖先链中,像这样:

C ... A ... B ... D

我曾尝试再次简单地包含 A,但这没有用。有办法做到这一点吗?

最佳答案

混合层次结构一旦建立就无法更改。只有包含顺序决定了层次结构。在将 B 包含到 C 之后,您必须将 A 包含到 C 中(第一次),或者,如果您在 C 之前添加 A 而不是包含它,那么它将优先于 D 即使 B 是稍后包含到 C 中。

关于ruby - 在 Ruby 中,是否可以将模块向上移动到祖先链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799396/

相关文章:

ruby-on-rails -::ModuleName::ClassName 和 ModuleName::ClassName 有什么区别

css - 加载 SASS 样式表时出错

ruby-on-rails - 登录时的 AWS EC2 默认 Ruby 版本

ruby - 工头从手动路径开始

javascript - 在脚本标签中使用 Ruby 变量

ruby-on-rails - 在设备中的两个 Web 应用程序之间共享 session

node.js - 在 Ruby 中从 aws-kms 解密 key

ruby-on-rails - 我如何检查 Ruby on Rails 中的当前时间是否在今晚 9 点到早上 9 点(明天)之间

Ruby LDAP 在 Rails 应用程序中不起作用,但在控制台中工作正常

mysql - Debian Ruby 安装路径