问题标签 [enrich-my-library]
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.
scala - 如何将基于交叉产品的方法添加到 scala 集合?
希望这将是一个关于图书馆拉皮条的简单问题(因为关于该主题的其他问题往往会产生超出我当前技能水平的答案)。
我想要做的就是映射一个集合的叉积与它自己。
所以我试图这样拉皮条Traversable
:
但它不起作用(它没有进行隐式转换)而且我不明白为什么不(我对 scala 很陌生)。我还尝试了使用丰富 Scala 集合中建议的方法,该方法给我留下了:
,但这会引发与我的(看起来更简单的)方式相同的错误。
我在这里做错了什么?
scala - 丰富内部类
我想为内部类实现丰富的库模式,该模式适用于外部类的任何实例。像这样的东西:
由于类型不匹配,此代码将无法编译:get
返回类型为Outer#Inner
但test
期望的对象outer.Inner
。
我有两种方法可以让它发挥作用,但都涉及asInstanceOf
我想避免的使用。第一个只是简单地将结果get
转换为outer.Inner
:
第二个更通用一些,并且在ExtInner
:
有没有更好的方法来丰富内部类,这样就不需要进行强制转换了?
scala - 如何向库对象添加新方法?
我有一个图书馆的课程(特别是,com.twitter.finagle.mdns.MDNSResolver
)。我想扩展这个类(我希望它返回一个 Future[Set],而不是一个 Try[Group])。
当然,我知道我可以对它进行子类化并在那里添加我的方法。但是,我正在努力学习 Scala,这似乎是一个尝试新事物的机会。
我认为这可能的原因是JavaConverters
. 以下代码:
无法编译,因为asScala
Java 的ArrayList
. 但是,如果我导入一些新定义:
然后突然有一个方法asScala
。所以看起来这个ArrayList
类正在被透明地扩展。
我JavaConverters
是否正确理解了的行为?我可以(并且应该)复制该方法吗?
scala - 另一个 Scala CanBuildFrom 问题:包装另一个不同类型的集合丰富运算符
用户 Régis Jean-Gilles 优雅地回答了我之前在 CanBuildFrom 和丰富函数(又名“pimp my library”或“enrich my library”)中苦苦挣扎的问题:
在 Scala 中创建一个使用正确类型包装 map() 的隐式函数:不适合胆小的人
但这一次我遇到了一个更复杂的问题。
我有一个函数来实现变体intersectWith
, 通过它们的键相交集合。我设法使它们像正确的收集功能一样工作:
现在,我目前也有非CanBuildFrom
版本intersectBy
和朋友,这些我无法作为CanBuildFrom
版本工作。
到目前为止我能想到的最好的版本是这样的:
首先,我不明白为什么需要用可变缓冲区重写对map
产生的调用;keyed_a
似乎必须有更好的方法。但我仍然在底线得到同样的错误:
所以我的问题是:
- 如何调用
map
GenTraversableLike? - 如何使呼叫
intersectWith
正常工作?我知道我必须以某种方式传递CanBuildFrom
基于我收到的那个,并且我知道关于mapResult
Builders,但我不确定在这里做什么,或者这是否可能。
的一个例子intersectBy
,它与浮点数列表相交,如果它们的整数部分相同,则将两个数字视为相同,并计算绝对差:
(除了返回的类型应该是List[Double]
)
谢谢你的帮助。
scala - 配置 scaladoc 以包含扩展方法
我可以通过指定隐式转换来配置 scaladoc 以包含来自隐式转换的方法吗?
例如给定
我可以在 scaladocbar
的文档中包含扩展方法Foo
吗?
scala - 类型不匹配; 找到:需要 Int(1):B
我正在尝试扩展List
该类以提供一些更简化的方式来比较大小,但是我遇到了标题中的错误...
这是我的代码:
这个想法是,因为它所做的一切都是比较列表的大小,所以它们的类型可能不同并且没关系,但是当我尝试这样做时:
我得到了前面提到的错误。如果我删除 B 并将其设置that
为 typeList[A]
它工作正常,但是我将无法使用包含 2 种不同类型的列表......
为什么A和B不能是同一类型?还是我错过了什么?
编辑:好的,我找到了错误的解决方案,这很简单:
但是我的问题仍然存在;为什么我不能以其他方式做呢?
scala - 如何为 Option 实现 flatMap
我正在尝试实现map
andflatMap
作为 的扩展/丰富Option
,而不作弊并查看它是如何在 Scalaz 中实现的。
所以这是我在卡住之前得到的:
我真正需要的是基本功能,所以我可以做这样的事情:
有什么提示吗?
scala - 如何丰富包对象?
我最近发现可以使用Pimp Enrich My Library 模式向伴随对象添加方法.type
:
不幸的是,这似乎不适用于包对象,例如scala.math
:
我收到以下编译器错误:
是否可以丰富一个包对象?
scala - Scala:值类 X 添加到其方法的返回类型为 X#
我想丰富一个“scala 图表”图表。为此,我创建了一个隐式值类:
问题在于其方法的返回类型,例如:
原因是否在于“Graph”具有依赖的子类型,例如 NodeT?有没有办法使这种浓缩工作?