问题标签 [f-bounded-polymorphism]

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 投票
5 回答
13855 浏览

c++ - “奇怪重复的模板模式”的实际用途

“奇怪重复的模板模式”有哪些实际用途?通常显示的“计数类”示例对我来说并不是一个令人信服的示例。

0 投票
5 回答
493 浏览

c++ - 另一个奇怪的重复模板模式

问题很简单,如何让上面的代码编译?目的是让 Node 有可能分配其他节点(并提供默认分配器)。

0 投票
1 回答
275 浏览

c++ - 奇怪的重复模板?

我有一个问题,奇怪的是重复出现的模板可以很好地提供帮助,但我什至无法通过一个简单的测试。

这会导致错误

我错过了什么。

用 g++ 4.2.1 编译

0 投票
2 回答
726 浏览

c++ - 导出奇怪的重复模板和协方差

假设我有一个克隆派生类的基类:

我有一组派生类,它们使用奇怪的重复模板模式实现:

我试图从中进一步得出这样的结论:

我收到编译错误,效果如下:

我意识到这可能是编译器在实例化 CRTP 时不完全了解 Derived 的继承树的结果。此外,将返回类型 (T*) 替换为 (Base*) 也可以编译。但是,我想知道是否有一种保留上述语义的解决方法。

0 投票
1 回答
821 浏览

scala - 尝试将 F 有界多态性建模为 Scala 中的类型成员

我想尝试编写一种类型,其方法可以是同质的并返回相同类型的值:

不幸的是,注释掉的行调用tester失败并出现以下错误(Scala 2.10):

X基本上,我对为什么Y不统一到感到困惑Foo,这对于他们两个来说似乎是一个明确的 LUB。显然,类型成员使事情复杂化,但它的界限似乎得到了尊重。

在更高的层次上,我正在寻找一种轻量级的方法来获得等效的 F 有界多态性,而无需普遍类型参数的开销。这似乎最有效,但我需要添加强制XY统一到Foo.

0 投票
1 回答
527 浏览

scala - 将 F 有界类型表示为抽象类型成员

我想将 F 有界多态性转换为抽象类型成员。

到目前为止,一切都很好。

让我们定义一个实例:

并尝试使用它:

F 有界版本工作正常。

def moveF[A <: FBoundedMovable[A]](a: A, to: Vect2): A = a.moveTo(to)

我知道可以将类型边界添加到方法定义站点:

def move2[A <: Movable { type Self = A }](a: A, to: Vect2): A = a.moveTo(to)

但是是否可以在 Movable 特征声明中指定关系?如果不是 - 为什么?

编辑 1

我已经意识到我遇到了什么问题。

假设我们要声明某物是我们世界中的一个单位。

trait WorldUnit extends Movable with Damageable

所有单元都是可移动和可损坏的。

我们战斗计算的东西只关心那个东西Movable with Damagable。它不关心它是单元还是建筑物。

但是我们可以有这样的代码:

我注定要使用 F 有界类型吗?

编辑2:

Attempting to model F-bounded polymorphism as a type member in Scala没有回答这个问题——我之前已经尝试过,它丝毫不会影响返回类型,它仍然是 a.Self。

编辑3:

我找到了http://blog.jessitron.com/2014/02/when-oo-and-fp-meet-mytype-problem.html但问题仍未解决。

基本上,每当您有收藏并想挑选一个时:

(collection: Seq[Movable]).collectFirst { m: Movable if m.someCondition => m }- 您无法指定类型绑定,因此编译器无法证明 A#Self =:= A?

0 投票
2 回答
1980 浏览

scala - scala f 有界类型解释

看了几个例子后,我不得不说,我没看懂 F-Bounded 多态带来了什么。

使用 scala 学校的示例 ( https://twitter.github.io/scala_school/advanced-types.html#fbounded )

他们解释说他们需要一些 F-Bounded 类型,以便子类可以返回子类型。所以他们做了这样的事情:

但是当你可以使用这样的东西时,我看不出使用这种类型有什么好处:

任何解释都非常受欢迎

谢谢

0 投票
2 回答
275 浏览

scala - 对象上的 Scala F 有界多态性

我无法在 Scala 中编写以下 F 有界多态性。为什么?

我如何表达这一点并使其编译?

0 投票
0 回答
204 浏览

java - 为什么使用 F-Bounded Type 在现有类型层次结构中添加新方法

我正在阅读以下有关使用 Java 泛型解决表达式问题的论文。

http://www.daimi.au.dk/~madst/ecoop04/main.pdf

作者提出了第一个解决方案,使用 F-Bounded 类型来确保左右参数是 EvalExp 类型。

我试图在不使用 F-Bounded 类型的情况下解决问题,并最终得到以下似乎有效的代码

此解决方案是否解决了表达式问题(是否可以扩展新数据和操作)?

是否满足代码级别的可扩展性(有关详细信息,请参阅论文)。

上述解决方案是否比论文中提出的 F-Bounded 解决方案有任何缺点?

欢迎任何解释。

编辑:更新了代码以修复编译问题。

0 投票
1 回答
46 浏览

scala - 对具有 F 有界类型的集合的函数应用

我一直在尝试学习更多 Scala 并遇到了这篇讨论 F 有界类型的有趣文章。我对关于使用此类类型的值集合的最终讨论特别感兴趣。

一个简单的例子如下:

如博客文章所示,我们可以使用存在量词来允许我们me2调用C1C2

现在,我一直在尝试对列表类型进行几种变体,我希望有更多经验的人能指出我遗漏的一些细微之处。

以下工作符合我的预期

我也可以调用_.me并将列表表示为包含 的实例AbsClass[A] forSome {type A},如

但是当我尝试再次应用相同的地图l时,我会丢失类型信息并卡在List[Any]. 有没有办法在这里维护类型?