问题标签 [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 投票
1 回答
1126 浏览

.net-4.0 - 滥用 .NET 4.0 Interface Code Contracts 功能来实现 MixIns 功能

.NET 4.0 具有新的代码合同功能。它也适用于接口,如此处所述(向下滚动到评论中的某处):

http://weblogs.asp.net/podwysocki/archive/2008/11/08/code-contracts-for-net-4-0-spec-comes-alive.aspx

现在我的问题是,我们是否可以通过将更多自定义代码放入这些合约类来实现某些 MixIns 功能来使用和滥用这个“默认接口实现功能”?

0 投票
2 回答
1508 浏览

c++builder - VCL 多重继承

我正在尝试开发一组控件,它们在大小方面都有许多共同的行为。我认为这是一个需要多重继承的例子(尽管我完全愿意接受任何相反的建议)。我想做的基本上是一个mixin模式

等等……

我已经在 Sizable 类中编写了大量的大小调整代码并对其进行了测试,这很好,但现在我已经列出了结构的其余部分(是的,我可能应该首先为这些类编写一个骨架)并且有遗憾地发现:

我已经删除了所有不需要成为成员函数的函数(例如测量字符串的长度),但是仍然有很多函数是不可能的。

有没有人有任何设计建议,这样我就不必复制大量代码?

0 投票
1 回答
372 浏览

perl - MooseX::NonMoose 类中的 mixin 问题

考虑以下:

编译时的输出是:

我为什么在乎?因为当我尝试use使用 CGI::Application::Plugin::* 类时,它希望我CGI::Application已经在编译时继承自。插件类尝试add_callback在我的类上作为类方法调用,但不能,因为我@ISA的尚未设置。

解决这个问题的最佳方法是什么?@ISA在一个块中手动调整会BEGIN干扰MooseX::NonMoose吗?

编辑

以下似乎有效,但我觉得它令人反感:

我对 Moose 的内部结构知之甚少(或任何东西,真的),不知道这是否是个好主意。

0 投票
2 回答
236 浏览

.net - 是否有允许多个继承行为的 BDD 样式框架?

我们的许多系统测试都是以 BDD 风格编写的,我们充分利用继承的行为来最大限度地减少重复,例如,这可能是购买测试的基本层次结构。

在这种情况下,BehavesLikeSuccessfulPurchase定义的常见行为(如帐户对帐单)应该有一个借记条目,并且BehavesLikePurchaseWithValidCreditCard该类定义了使用有效信用卡购买任何类型产品的测试工作流程,因此测试是简单地提供具体产品实例的小型派生类,例如

但是,根据具体的产品类型,我们还需要进行一些额外的检查,例如,每当成功购买视频时,我们都希望检查它是否已添加到用户的视频库中。理想情况下,这可以由另一个类定义并混合使用,使用假设的语法:

但是当然 C# 不支持多重继承或混合,所以我们最终编写了一堆样板方法,将调用转发到其他行为,每次行为改变时都需要改变。

我们真正需要的是一个框架,它有自己的机制来支持测试中的多种行为,只需提供应该观察的其他行为的类型。我一直在查看 xUnit 和规范示例,看起来有可能提出一些可以解决问题的扩展,但是是否已经存在任何东西?

0 投票
6 回答
12374 浏览

ruby-on-rails - 将多个模型中的通用代码放在哪里?

我有两个包含相同方法的模型:

我应该把这个放在哪里?

我知道通用代码位于Rails 应用程序的lib目录中。

但是如果我把它放在一个lib名为' Foo'的新类中,并且我需要将它的功能添加到我的两个类中ActiveRecord models,我是否会这样做:

然后两者AB包含foo方法,就像我在每个中定义它一样?

0 投票
5 回答
5086 浏览

ruby-on-rails - 使用基类与基模块重构 ActiveRecord 模型

A 类和 B 类是相同的:

像这样用基类重构有什么区别:

与使用基本模块的情况相比:

一种方式优于另一种方式吗?

0 投票
2 回答
694 浏览

ruby-on-rails - Rails - 为什么我不能在测试中使用我在模块中创建的方法?

我在 lib 目录中创建了一个模块,我可以在我的 Rails 应用程序中自由调用它包含的各种方法(添加包含 ModuleName 之后),没有任何问题。

然而,当涉及到测试时,他们抱怨不存在这样的方法。我尝试将模块包含在我的测试助手中,但没有成功。任何人都可以帮忙。





0 投票
9 回答
685 浏览

c++ - 即时推导

有一个不太常见的 C++ 习惯用法,过去我用过几次效果很好。我似乎不记得它是否有一个常用的名称来描述它。

它与mixinsCRTPtype-erasure有点相关,但与这些东西无关。

当您想向一个类添加一些实现,但又不想将它放在该类或它派生的任何类中时,就会发现问题。造成这种情况的一个原因可能是该类可能是继承层次结构的一部分,其中实现应该只发生一次。

暂时不考虑诸如层次结构是否应该具有具体的非叶类,或者在某些情况下是否可以选择虚拟继承等问题,我知道一种解决方案是在派生自的模板类中提供实现它的模板参数。然后,这允许您在创建实例时使用模板,但只能通过指针或对其基之一的引用来使用该对象(从广义上讲,这就是类型擦除的来源)。

一个例子可能是你有一个侵入性的引用计数。您的所有类都派生自 ref count 接口,但您只希望 ref count 本身和 ref count 方法的实现出现一次,因此您将它们放在派生模板中 - 我们称之为ImplementsRC<T>。现在您可以像这样创建一个实例:

我正在掩盖诸如由多个模板化重载形成的转发构造函数等内容。

所以,希望我已经说清楚了这个成语是什么。现在回到我的问题 - 这个成语是否有一个公认的或至少普遍使用的名称?

0 投票
3 回答
2160 浏览

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 不带参数,我可以使它们成为特征并将它们混合在一起。但在这里我希望混合取决于参数的类型。有没有好的解决方案?

0 投票
3 回答
359 浏览

c++ - 朋友mixin模板?

假设我有两个类 Foo 和 Bar,我想在不更改 Foo 的情况下与 Bar 交 Foo 朋友。这是我的尝试:

尝试调用私有函数时出现编译器错误,因此显然它不起作用。有任何想法吗?