问题标签 [mixins]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
9525 浏览

ruby - 获取包含模块的类列表

我有一个 mixin,我想获得一个包含它的所有类的列表。在 mixin 模块中,我做了以下工作:

这很好用:

现在,我想将这部分提取到一个单独的模块中,该模块可以包含在我的其他 mixin 中。所以,我想出了以下内容:

但这不起作用,因为从 ListIncludedClasses 添加到 MyModule 的 #included(module_base) 方法永远不会运行。有趣的是,它确实成功地将#classes 添加到了MyModule。

我错过了什么?

0 投票
3 回答
13259 浏览

ruby-on-rails-3 - 如何在 Rails 3 的控制器中使用 mixins 或模块?

我的控制器中有一些行为,我将其提取到一个模块中,以便更好地测试并在几个地方重新使用它。关于这个的两个问题:

  1. 哪里是放置我的模块的好地方?它们需要运行才能对控制器可用,所以我在考虑config/initializers/目录。不过,这对我来说似乎有点可疑。lib/?
  2. 如何确保代码运行,以便模块include在我的控制器中可用?

谢谢好心的先生们。

0 投票
5 回答
6510 浏览

ruby - Ruby 中抽象类的替代方案?

我是红宝石的新手。一个简单的例子,我需要什么:

换句话说,所有扩展 Animal 的类都应该需要eat() 方法。

在 JAVA 中我只会使用一个抽象类,但在做了一些研究后我发现很多人不在 Ruby 中使用它,而是推荐使用 mixin / modules。

但是,我不明白,模块是否可以做的不仅仅是包含添加方法。确切地说,模块可以为类设置它们必须实现哪些方法的要求(如果可以,将不胜感激)?

总而言之,在这种情况下,当我想确定所有相同类型的类都有特定的方法并以自己的方式实现它们时,我应该使用什么?

0 投票
4 回答
2240 浏览

ruby - Ruby 模块包含如何不是真正的“多重继承”,Ruby 风格如何避免与多重继承相关的问题?

据推测,Matz 说“mixin 几乎可以完成多重继承所做的所有事情,而没有相关的缺点”(Matz 的话)。

首先,为什么 Ruby 模块包含不是“多重继承”?在我看来,模块和类之间几乎没有区别。当模块用作超类时,您无法实例化模块这一事实无关紧要。

我也知道连续的模块包含形成了一个从类向上延伸的单一继承链(不是树)。但是,对我来说,这不足以将它与“多重继承”区分开来,因为 Python 多重继承系统也“线性化”了超类链(使用C3 算法),只是 Ruby 的“线性化”过程要简单得多。

那么,在像 Python 这样的语言中,Ruby 模块混合与多重继承到底有什么区别呢?为什么 Python 采用 c3 MRO 算法背后的论点不适用于 Ruby?如果它们确实适用 - 为什么 Ruby 决定不采用这种算法?

谢谢

0 投票
1 回答
404 浏览

php - lessphp 中的多嵌套、多块混合

同时将一些代码从经典的less代码转换为lessphp;我从经典的less css 中发现的一个不兼容性是不支持嵌套级别> 2 的多块混合。经典的less 似乎完全支持其中包含许多嵌套块的混合。

这是故意的吗 - 只支持混合内的两个嵌套级别?

例子:

lessphp 上面发生的事情是第三个嵌套级别;其中包含li标签的 css 代码被完全忽略!

0 投票
3 回答
4183 浏览

ruby - 如何让模块 mixin 为静态方法工作?

可以说我有两个模块。是否可以在另一个行为类似于 mixin 的模块中包含一个模块?

例如:

编辑:我意识到我最初将代码复制错了。这些方法必须是静态的。更正的代码在上面(并且不起作用)。

0 投票
8 回答
2363 浏览

python - 在 Python 中,可以在不使用继承的情况下实现混合行为吗?

在 Python 中是否有一种合理的方法来实现类似于 Ruby 中的混合行为——也就是说,不使用继承?

我有一个模糊的想法,用类装饰器来做这件事,但我的尝试导致了混乱。我对该主题的大部分搜索都指向使用继承(或者在更复杂的场景中,多重继承)来实现混合行为的方向。

0 投票
6 回答
277 浏览

c# - 如何在 C# 中构建一个混合架构框架?

我有一个想要构建的控件框架的概念。这个想法的不同之处在于,我不打算采用“一刀切”的方法或“一个控制来统治他们”的方法。

例如,Telerik 和 ComponentOne、Xceed 等制作了一个非常棒的 Grid 控件。然而,它们都是具有成百上千个方法和属性、复杂对象模型层次结构等的巨大控件……这些往往网格对于您需要的东西来说太过分了,但是您仍然必须承担学习整个网格以做一些简单的事情的艰巨任务。

我的概念更像是一种“混合”方法。您可以在其中创建一个非常简单的控件,然后构建您可以“添加”到该控件的功能点菜。例如,您有一个简单的网格,并且您想为每个添加带有页眉和页脚的网格“部分”。

好的,那么问题出在哪里?做这种事情的传统方式是通过多重继承,C# 不支持。即使它确实支持它,我仍然认为 MI 增加的问题多于它解决的问题。

所以我正在征求关于如何解决这个问题的意见。MEF 会是一个潜在的解决方案吗?

编辑:

我想到的是,可以使用表达式树从各种表达式构建控件。我必须再考虑一下,但这是一个有趣的概念。

另一个可能的选项可能是“控制生成器”,它基于选定的特征生成装配。这似乎更复杂,但使用 T4 可能是可以管理的。

0 投票
3 回答
440 浏览

c++ - 使用父类定义的类型的基类

我有一个 Visual Studio 2008 C++ 应用程序,其中基类A_Base需要实例化其类型由父类定义的数据成员。例如:

不幸的是,编译器似乎不知道是什么T::Foo,直到为时已晚,我得到这样的错误:

有没有办法实现这种功能?

谢谢,保罗

0 投票
2 回答
8449 浏览

ruby-on-rails - 包含测试助手模块时的“未初始化常量”

尝试将辅助模块包含到测试中时出现未初始化的常量错误。

我的 rails 测试目录中有以下文件

类/模块主体如下:

当我运行它时,测试输出是:

/.../.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.3.0/lib/rspec/core/backward_compatibility.rb:20:in `const_missing': 未初始化的常量 ControllerHelper (NameError )

我尝试过使用命名空间,但根本无法混合模块!任何想法为什么我会收到此错误?或者这甚至是提取常见测试功能的正确方法吗?我对 Rails 很陌生,所以任何建议都将不胜感激:)

干杯!