问题标签 [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.

0 投票
1 回答
56 浏览

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.

0 投票
1 回答
400 浏览

scala - 使用 StringContext 的通用字符串插值器

我正在尝试创建一些简单的自定义字符串插值器,只要我不尝试使用类型参数,我就成功了。

我可以让它工作吗?我不能使用参数多态性,因为我不是定义这三种类型的人。

该伪代码模式匹配的类型级别的等价物是什么?

最新尝试

我最近的尝试是隐式使用,但我没有这样的隐式!我实际上有兴趣抓住编译器希望我根据类型推断返回的类型。

0 投票
3 回答
51 浏览

scala - Scala不允许我添加整数

这是一些对我来说看起来足够合理的代码:

当我尝试编译它时,我得到两个这样的错误:

我了解我的编译器正在尝试使用+. 但它为什么要这样做呢?我如何要求编译器在这里使用整数加法?

(更改IntInteger无济于事。)

0 投票
2 回答
96 浏览

scala - 在 scala 中使用两个隐式定义变量

我在 twitter 上看到了 scalaLang 的一篇有趣的帖子。此代码在哪里编译和工作

有人可以解释一下它是如何工作的吗?我阅读了implicits的文档,但没有找到这样的案例。请解释一下这里发生了什么。

任何帮助表示赞赏!

0 投票
2 回答
1758 浏览

scala - 为什么我得到“找不到参数消息的隐含值:play.api.i18n.Messages”

我在 Messages("title") 上收到上述编译错误

我在项目的 conf 文件夹中的消息文件包含以下内容

如果您想知道,我的模板会包含以下内容:

为什么我会收到此编译错误?

0 投票
2 回答
157 浏览

scala - Scala:从构造函数中的内部类获取外部类

我有一个匿名内部类,我想在构造函数中访问它的(匿名)外部类。所以我想实现这个方法:

0 投票
1 回答
172 浏览

scala - Scala - 是否可以在超类中定义隐式函数?

我正在使用 Scala Play 编写 Web 服务。功能还可以,但我正在重构一些部分以使我的代码更具可读性和清洁性。

我对我的每个实体类都使用了隐式来使它们可以转换为 Json。我还注入toJson了函数,Seq[MyEntityClass]以便能够通过调用单个函数来创建 Json 数组。

它看起来像这样:

如何在超类中定义此代码以不为每个实体类重复此代码?

为什么这不起作用?

0 投票
0 回答
101 浏览

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?

0 投票
1 回答
215 浏览

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

0 投票
3 回答
230 浏览

scala - scala中的字符串伴随对象

给定一个具有“转换器”的类型,我想使用该类型的伴随对象对方法调用进行自动转换。也就是说,给定以下定义,

使以下代码工作:

但这失败了,两次转换尝试都失败了。请注意,我无法更改f,因为它是由第三方库提供的并且其中有很多。

  1. 我可以f(String)使用隐式进行编译吗?

如果字符串不可能,那么具有伴生对象的类呢,我一般可以这样做吗:

  1. 我可以先toConverter编译吗?