问题标签 [scala-implicits]
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:强制在特征中声明的隐式优先级
关于这个话题有无数的问题,如果不是非常准确的话,这里有一篇相当不错的文章:Revisiting implicits without the import tax。我已经阅读了其中的大部分内容,但是在CanBuildFrom
不自己重复声明的情况下覆盖默认隐式存在问题。如果您熟悉 scala 集合库和 的解析CanBuildFrom
,您就会知道对于每个 scala 集合 trait CC[X]
,它的伴生对象都定义了一个隐式CanBuildFrom[CC[_], X, CC[X]]
实例。我已经介绍了我自己的集合层次结构,它植根于一个派生自的类IndexedSeq[X]
:
我可以避免在所有已定义特征的伴随对象中声明隐式值,而是将它们提取到伴随对象的公共基本特征中吗?我尝试过:
不幸的是,这些定义并没有被认为比object IndexedSeq
. 由于实际上它不是一个单一的隐含值,而是随着对X
.
scala - 使用 StringContext 的通用字符串插值器
我正在尝试创建一些简单的自定义字符串插值器,只要我不尝试使用类型参数,我就成功了。
我可以让它工作吗?我不能使用参数多态性,因为我不是定义这三种类型的人。
该伪代码模式匹配的类型级别的等价物是什么?
最新尝试
我最近的尝试是隐式使用,但我没有这样的隐式!我实际上有兴趣抓住编译器希望我根据类型推断返回的类型。
scala - Scala不允许我添加整数
这是一些对我来说看起来足够合理的代码:
当我尝试编译它时,我得到两个这样的错误:
我了解我的编译器正在尝试使用+
. 但它为什么要这样做呢?我如何要求编译器在这里使用整数加法?
(更改Int
为Integer
无济于事。)
scala - 在 scala 中使用两个隐式定义变量
我在 twitter 上看到了 scalaLang 的一篇有趣的帖子。此代码在哪里编译和工作
有人可以解释一下它是如何工作的吗?我阅读了implicits的文档,但没有找到这样的案例。请解释一下这里发生了什么。
任何帮助表示赞赏!
scala - 为什么我得到“找不到参数消息的隐含值:play.api.i18n.Messages”
我在 Messages("title") 上收到上述编译错误
我在项目的 conf 文件夹中的消息文件包含以下内容
如果您想知道,我的模板会包含以下内容:
为什么我会收到此编译错误?
scala - Scala:从构造函数中的内部类获取外部类
我有一个匿名内部类,我想在构造函数中访问它的(匿名)外部类。所以我想实现这个方法:
scala - Scala - 是否可以在超类中定义隐式函数?
我正在使用 Scala Play 编写 Web 服务。功能还可以,但我正在重构一些部分以使我的代码更具可读性和清洁性。
我对我的每个实体类都使用了隐式来使它们可以转换为 Json。我还注入toJson
了函数,Seq[MyEntityClass]
以便能够通过调用单个函数来创建 Json 数组。
它看起来像这样:
如何在超类中定义此代码以不为每个实体类重复此代码?
为什么这不起作用?
scala - Avoiding implicit parameters becoming implicit conversions
The intended output of the following code is the digit, 0
.
The actual output is an exception:
Investigation shows that Map
implements apply(string): Int
causing the implicit parameter supplied to doWork
, massTable
, to also and unintentionally function as an implicit conversion from String => Int
.
The result is that, the above toInt
call is the synthetic method toInt
for the type Int
, rather than the toInt
method provided by StringOps
.
What is the best way to avoid this sort of issue and achieve the desired output?
scala - 将函数的隐式转换链接到泛型类
我有以下代码,它应该采用一个函数A => Boolean
(输入类型的泛型)并Y[A]
通过链式隐式转换将其转换为泛型特征:
不幸的是,最后一行无法编译。
进行以下任何一项更改都足以使代码编译:
- 转向
X
非泛型 - 转向
Y
非泛型 - 将源类型(输入类型上的泛型函数)替换为输出类型上的泛型函数 (
Int => A
) - 将源类型替换为其他泛型类型,例如
Option[A]
,Seq[A]
或Array[A]
基于此,我的结论是隐式转换链不起作用,因为源类型(输入类型上的泛型函数)是通用的和逆变的,而中间类型和目标类型(X[A]
和Y[A]
)是通用的。
关于如何解决这个问题的任何想法?
更新:最终代码缩进处理不仅是作为源类型的函数,还包括其他类型(Option[A]
、Seq[A]
、A
等)。为了实现这一点,我们的想法是拥有toX
将这些类型中的每一个转换为X[A]
. 然后只需要一个版本toY
。
scala - scala中的字符串伴随对象
给定一个具有“转换器”的类型,我想使用该类型的伴随对象对方法调用进行自动转换。也就是说,给定以下定义,
使以下代码工作:
但这失败了,两次转换尝试都失败了。请注意,我无法更改f
,因为它是由第三方库提供的并且其中有很多。
- 我可以
f(String)
使用隐式进行编译吗?
如果字符串不可能,那么具有伴生对象的类呢,我一般可以这样做吗:
- 我可以先
toConverter
编译吗?