问题标签 [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 回答
821 浏览

scala - Scala:递归隐式类型

我具有以下用于解析的特征,这些特征为对象的开头和结尾提供文件位置:

在伴生对象中,我创建了一个隐式的,因此 PosnEnds 序列本身就是隐式 PosnEnds:

无论如何要递归使用隐式,因此 Seq[Seq[A]] 和 Seq[Seq[Seq[A]]] 等将被隐式转换为 PosnEnds 特征?在实践中,我可能不需要很大的深度,但最好使用一个优雅的解决方案,隐式转换任意深度的 Seq。

目前对于深度 2,我正在使用:

0 投票
2 回答
980 浏览

scala - Scala 找不到隐式,我不知道为什么 - 有人能指出我正确的方向吗?

我正在尝试编写一个工厂来创建案例类。我正在创建一个命令行工具,它接受案例类参数的字符串表示形式。无论如何,这个想法是将添加的更改限制为为新类型创建隐式,但我似乎无法超越起跑线。下面是一些尝试创建案例对象的代码(所以没有参数 - 最简单的案例),但 scalac 抱怨它“找不到参数工厂的隐式值”。一定是笨蛋,但我已经尝试了我能想到的一切。如果有人能指出我正确的方向,将不胜感激。谢谢。

0 投票
2 回答
1901 浏览

scala - 缓存隐式解析

为了减少我的项目的编译时间,我正在缓存通过隐式查找解析的某些类型类。不过,这似乎有些麻烦,因为直接的实现不起作用:

隐式查找将其自己的未初始化定义视为有效实现。Alazy val会以无限递归来炸毁堆栈。因此,我目前正在以这种方式处理它:

但这使得它过于复杂,并且缓存定义不能轻易使用其他缓存类型类(因为它们不是隐式的)。

此外,不幸的是,将值本身从范围中隐藏是行不通的。

有没有更优雅的方法来实现隐式解析缓存?

0 投票
1 回答
214 浏览

scala - Scala vs Haskell 类型类:“catchall”实例

以下 Haskell 类型类和实例:

通常像这样翻译成 Scala:

在 Haskell 中,我现在可以定义一种包罗万象的实例,从而为所有 Maybe 类型创建一个实例:

这定义了Ablefor Maybe IntMaybe Bool等的实例,前提是存在Ablefor IntBool等的实例。

在 Scala 中如何做到这一点?

0 投票
0 回答
464 浏览

scala - 低优先级隐含的歧义

我有以下 Scala 代码片段:

基本上,我想要实现的是首先寻找一个隐含的Write对象。如果没有,请回退到from的默认.toString值。AnyLowPriorityWrites

但是,这种方法不起作用:

0 投票
1 回答
77 浏览

scala - 通用扩展 Scala 集合

我有一个Seq[(A, B)]. 我想为这样的集合添加一个隐式方法,这样我就可以.toMultiMap取回一个Map[A, Seq[B]].

这是我的第一次尝试:

但是,现在的问题是我总是得到一个Traversable值。Map[A, Set[B]]如果我这样做,我想取回一个Set[(A, B)].toMultiMap

所以,然后我尝试了这样的事情:

但是,它不起作用:

这样做的方法是什么?

0 投票
1 回答
82 浏览

scala - scala 类型需要隐式

我正在尝试建立以下

我有一个父泛型类

还有一些实现,例如

我有以下配置图:

我的问题是我应该用什么代替???。理想情况下,它应该类似于T : Writes,因为我只关心这种类型是否已Writes隐式实现,正如我将要介绍的那样Json.toJson。它将与 一起编译Any,但是该类应该Writes隐式实现的信息会丢失。还是我应该使用不同的方法?我可能可以为我的所有结果案例类(例如LengthResult)创建一个超类,但我想摆脱隐含。

0 投票
2 回答
241 浏览

scala - 函数类型定义中隐含的scala

我有以下抽象类:

和以下实现:

我之所以有这些apply方法是因为我需要以下配置图:

这样我就可以通过包含其名称的字符串来初始化提供者:

现在,我的问题是所有这些提供者构造函数都需要两个隐式变量。但我不知道如何将它包含在函数定义(DB) => FieldProvider中。因此,本质上,apply方法签名应该类似于(DB)(implicit RequestAction, ExecutionContext) => FieldProvider,但我不知道我正在尝试做的事情是否有正确的语法。

我也可以放弃并明确传递它们:

但是我必须在其他地方明确地传递它们,而不是providers("length")(db),我必须写providers("length")(db, implicitly[RequestAction], implicitly[ExecutionContext]),这感觉不对。

0 投票
1 回答
40 浏览

scala - 通常将隐式添加到 TreeSet 和 TreeMaps

我想为 Scala 中的可变和不可变 TreeMap 和 TreeSet 添加一些有用的隐式。

这是我的尝试:

  1. 首先尝试定义具有headOption/ lastOption(from GenTraversableLike) 和from/ to/ until(from Sorted) 的 TreeMap 和 TreeSet 的最小上界:

    /li>
  2. 写我的工具:

    /li>

这仅部分有效:SortedSet#greaterThan编译但TreeMap#greaterThan不编译。我如何解决它?

0 投票
1 回答
62 浏览

scala - 将隐式变量从私有更改为公共导致“协变类型 T 发生在不变位置”错误

我的一个班级有一个 TypeTag:

TypeTag(在本例中为私有变量)由于不可序列化而导致了一些问题。所以尝试将其声明为@transient:

但是这个看似微不足道的改动却引发了一个大问题,Scala编译器抛出如下错误:

我所做的只是将私有变量更改为公共变量。我应该怎么做才能消除这种错误?