问题标签 [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.
.net-4.0 - 滥用 .NET 4.0 Interface Code Contracts 功能来实现 MixIns 功能
.NET 4.0 具有新的代码合同功能。它也适用于接口,如此处所述(向下滚动到评论中的某处):
现在我的问题是,我们是否可以通过将更多自定义代码放入这些合约类来实现某些 MixIns 功能来使用和滥用这个“默认接口实现功能”?
c++builder - VCL 多重继承
我正在尝试开发一组控件,它们在大小方面都有许多共同的行为。我认为这是一个需要多重继承的例子(尽管我完全愿意接受任何相反的建议)。我想做的基本上是一个mixin模式
等等……
我已经在 Sizable 类中编写了大量的大小调整代码并对其进行了测试,这很好,但现在我已经列出了结构的其余部分(是的,我可能应该首先为这些类编写一个骨架)并且有遗憾地发现:
我已经删除了所有不需要成为成员函数的函数(例如测量字符串的长度),但是仍然有很多函数是不可能的。
有没有人有任何设计建议,这样我就不必复制大量代码?
perl - MooseX::NonMoose 类中的 mixin 问题
考虑以下:
编译时的输出是:
我为什么在乎?因为当我尝试use
使用 CGI::Application::Plugin::* 类时,它希望我CGI::Application
已经在编译时继承自。插件类尝试add_callback
在我的类上作为类方法调用,但不能,因为我@ISA
的尚未设置。
解决这个问题的最佳方法是什么?@ISA
在一个块中手动调整会BEGIN
干扰MooseX::NonMoose
吗?
编辑
以下似乎有效,但我觉得它令人反感:
我对 Moose 的内部结构知之甚少(或任何东西,真的),不知道这是否是个好主意。
.net - 是否有允许多个继承行为的 BDD 样式框架?
我们的许多系统测试都是以 BDD 风格编写的,我们充分利用继承的行为来最大限度地减少重复,例如,这可能是购买测试的基本层次结构。
在这种情况下,BehavesLikeSuccessfulPurchase
定义的常见行为(如帐户对帐单)应该有一个借记条目,并且BehavesLikePurchaseWithValidCreditCard
该类定义了使用有效信用卡购买任何类型产品的测试工作流程,因此测试是简单地提供具体产品实例的小型派生类,例如
但是,根据具体的产品类型,我们还需要进行一些额外的检查,例如,每当成功购买视频时,我们都希望检查它是否已添加到用户的视频库中。理想情况下,这可以由另一个类定义并混合使用,使用假设的语法:
但是当然 C# 不支持多重继承或混合,所以我们最终编写了一堆样板方法,将调用转发到其他行为,每次行为改变时都需要改变。
我们真正需要的是一个框架,它有自己的机制来支持测试中的多种行为,只需提供应该观察的其他行为的类型。我一直在查看 xUnit 和规范示例,看起来有可能提出一些可以解决问题的扩展,但是是否已经存在任何东西?
ruby-on-rails - 将多个模型中的通用代码放在哪里?
我有两个包含相同方法的模型:
我应该把这个放在哪里?
我知道通用代码位于Rails 应用程序的lib
目录中。
但是如果我把它放在一个lib
名为' Foo
'的新类中,并且我需要将它的功能添加到我的两个类中ActiveRecord models
,我是否会这样做:
然后两者A
都B
包含foo
方法,就像我在每个中定义它一样?
ruby-on-rails - 使用基类与基模块重构 ActiveRecord 模型
A 类和 B 类是相同的:
像这样用基类重构有什么区别:
与使用基本模块的情况相比:
一种方式优于另一种方式吗?
ruby-on-rails - Rails - 为什么我不能在测试中使用我在模块中创建的方法?
我在 lib 目录中创建了一个模块,我可以在我的 Rails 应用程序中自由调用它包含的各种方法(添加包含 ModuleName 之后),没有任何问题。
然而,当涉及到测试时,他们抱怨不存在这样的方法。我尝试将模块包含在我的测试助手中,但没有成功。任何人都可以帮忙。
c++ - 即时推导
有一个不太常见的 C++ 习惯用法,过去我用过几次效果很好。我似乎不记得它是否有一个常用的名称来描述它。
它与mixins、CRTP和type-erasure有点相关,但与这些东西无关。
当您想向一个类添加一些实现,但又不想将它放在该类或它派生的任何类中时,就会发现问题。造成这种情况的一个原因可能是该类可能是继承层次结构的一部分,其中实现应该只发生一次。
暂时不考虑诸如层次结构是否应该具有具体的非叶类,或者在某些情况下是否可以选择虚拟继承等问题,我知道一种解决方案是在派生自的模板类中提供实现它的模板参数。然后,这允许您在创建实例时使用模板,但只能通过指针或对其基之一的引用来使用该对象(从广义上讲,这就是类型擦除的来源)。
一个例子可能是你有一个侵入性的引用计数。您的所有类都派生自 ref count 接口,但您只希望 ref count 本身和 ref count 方法的实现出现一次,因此您将它们放在派生模板中 - 我们称之为ImplementsRC<T>
。现在您可以像这样创建一个实例:
我正在掩盖诸如由多个模板化重载形成的转发构造函数等内容。
所以,希望我已经说清楚了这个成语是什么。现在回到我的问题 - 这个成语是否有一个公认的或至少普遍使用的名称?
scala - scala:mixins取决于参数的类型
我有一组模型类,以及一组可以在模型上运行的算法。并非所有类别的模型都可以执行所有算法。我希望模型类能够声明它们可以执行哪些算法。模型可以执行的算法可能取决于它的参数。
示例:假设我有两个算法,MCMC 和重要性,表示为特征:
我有一个模型类 Normal,它接受一个均值参数,它本身就是一个模型。现在,如果 mean 实现 MCMC,我希望 Normal 实现 MCMC,如果 mean 实现 Importance,我希望 Normal 实现 Importance。
我可以写:class Normal(mean: Model) extends Model { // 一些常见的东西放在这里 }
我可以创建工厂方法来确保以给定的平均值创建正确的 Normal 类型。但显而易见的问题是,如果 mean 同时实现了 MCMC 和 Importance 会怎样?然后我希望 Normal 也实现它们。但我不想创建一个重新实现建议和转发的新类。如果 NormalMCMC 和 NormalImportance 不带参数,我可以使它们成为特征并将它们混合在一起。但在这里我希望混合取决于参数的类型。有没有好的解决方案?
c++ - 朋友mixin模板?
假设我有两个类 Foo 和 Bar,我想在不更改 Foo 的情况下与 Bar 交 Foo 朋友。这是我的尝试:
尝试调用私有函数时出现编译器错误,因此显然它不起作用。有任何想法吗?