问题标签 [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.
ruby-on-rails - 从模块mixin(rails)的实例方法内部调用类方法
好奇如何从活动记录类包含的模块的实例方法内部调用类方法。例如,我希望用户模型和客户端模型共享密码加密的细节。
然而,这失败了。表示实例方法调用时找不到类方法。我可以调用 User.encrypt_password('password') 但 User.authenticate('password') 无法查找方法 User#encrypt_password
有什么想法吗?
qt - Qt:是否可以使用 mixins 技术?
Qt 库包括使用他们自己的预处理 moc 编译器的高级元编程功能。有谁知道,是否可以通过它创建某种混音?例如,我有一个 QString 并且想在不子类化和更改现有代码的情况下向它添加一个方法。Qt 有这样的解决方案吗?
actionscript-3 - AS3 中的 Mixin 或 Trait 实现?
我正在寻找有关如何在 AS3 中实现Mixin/Trait样式系统的想法。
我希望能够将多个类组合成一个对象。当然,这不是 AS3 的语言级功能,但我希望可能有某种方法可以使用基于原型的技术或我相信 AsMock 用来实现其功能的一些字节码黑客技术来做到这一点。
现有的 Java 示例是Qi4J,其中用户定义 Qi4j 框架根据元数据标签和约定编码实现的接口。
有人对如何在 AS3 中使用 Mixin/Trait 概念有任何想法吗?
language-agnostic - mixin 和装饰器模式有什么区别?
装饰器模式是类在运行时的动态扩展。它动态地形成一个 is-a 关系。
在我得到这个关于 mixin 和抽象类之间区别的答案后,我开始怀疑我是否使用装饰器模式使我的 API 过于复杂。
language-agnostic - 目前支持 mixin 的语言有哪些?
很明显 Ruby 和 Sass,但还有哪些其他的呢?
c++ - C++动态类型构造和检测
C++ 中有一个有趣的问题,但更多的是关于架构。
有许多(10、20、40 等)类描述了一些特征(混合类),例如:
主模块声明和导出一个函数(为简单起见,只声明没有类的函数):
任何其他模块都可以有这样的代码:
问题是你怎么知道给定对象的真实类型是什么operate()
而不使用dynamic_cast
类中的任何类型信息(常量等)?该operate()
函数在小时间段内与大量对象一起使用,并且dynamic_cast
速度太慢,我不想包含常量(enum obj_type { ... }
),因为这不是 OOP 方式。
我不能直接将 a 传递pBase
给这些函数。而且不可能有所有可能的类组合,因为我可以通过包含新的头文件来添加新的类。
想到的一种解决方案是,在编辑器中我可以使用复合容器:
但是编辑器不需要时间优化,可以dynamic_cast
根据零件来确定准确的类型。在operate()
我不能使用这个解决方案。
那么,是否可以避免使用adynamic_cast
和type信息来解决这个问题呢?或者也许我应该使用另一种架构?
c# - 帮助将 mixin 从 Castle.DynamicProxy 迁移到 DynamicProxy2
我正在尝试将一些代码从使用 DynamicProxy 更新为 DynamicProxy2。特别是我们使用 DynamicProxy 来提供两个类的混合。设置是这样的:
然后假设 IHasShape 和 IHasColor 有一些明显的具体实现,我们将创建一个这样的 mixin:
除了作为代理创建的结果之外,没有 IColoredShape 的具体实现。StandardInterceptor 对 IColoredShape 对象进行调用,并将它们委托给适当的“形状”或“颜色”对象。
但是,我一直在使用新的 DynamicProxy2 并且找不到等效的实现。
python - 在 Python 中进行 MixIns 的优雅方法是什么?
我需要找到一种优雅的方式来做 2 种 MixIn。
第一的:
现在,aMixInClass
应该method1
这样做:do_other()
-> A.method1()
-> do_smth_else()
- 即基本上“包装”旧函数。我很确定必须有一个很好的解决方案。
第二:
在这种情况下,我希望MixInClass2
能够在do_something()
and之间注入自身do_more()
,即:do_something()
-> MixIn.method1
-> do_more()
。我知道这可能需要修改class B
- 没关系,只是寻找最简单的方法来实现这一点。
这些都是非常微不足道的问题,我实际上解决了它们,但我的解决方案被污染了。
第一个使用self._old_method1 = self.method1(); self.method1() = self._new_method1();
和编写_new_method1()
调用_old_method1()
.
问题:多个 MixIn 将全部重命名为 _old_method1 并且不优雅。
第二个 MixIn 是通过创建一个虚拟方法call_mixin(self): pass
并在调用和定义之间注入它来解决的self.call_mixin()
。再次不优雅并且会在多个 MixIns 上中断..
有任何想法吗?
感谢 Boldewyn,我为第一个找到了优雅的解决方案(我忘记了您可以即时创建装饰器,而无需修改原始代码):
仍在寻找第二个想法(这个想法不适合,因为我需要在旧方法内部注入,而不是在外部注入,就像在这种情况下一样)。
第二个解决方案如下,将“pass_func”替换为lambda:0
.
java - 帮助在 Tapestry5 中创建 JavaScript mixin?
我正在创建一个 mixin,它在文本字段获得焦点时呈现一个 javascript 文件。
我对 Tapestry 中的 mixins 的想法很陌生,我不确定在哪里放置我希望在文本字段获得焦点时运行的原始 javascript 文件。
以下是我的代码示例: Java mixin 类:
Javascript 混合文件:
我希望在文本字段获得焦点时运行的 javascript 文件的一部分:
我的 javascript 文件比上面大得多,我的问题是我应该把我的 javascript 代码放在哪里?
是否应该全部包含在 mixin.js 文件中?如果是这样,它到底应该去哪里?
提前感谢您的帮助。
ruby - 你能在 Ruby 中定义 <=>,然后自动定义 ==、>、<、>= 和 <= 吗?
这是我的Note
课的一部分:
在我看来,应该有一个可以包含的模块,它可以根据我的<=>
方法为我提供相等和比较运算符。有吗?
估计很多人都会遇到这样的问题。你一般是怎么解决的?(你怎么让它变干?)