问题标签 [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:递归隐式类型
我具有以下用于解析的特征,这些特征为对象的开头和结尾提供文件位置:
在伴生对象中,我创建了一个隐式的,因此 PosnEnds 序列本身就是隐式 PosnEnds:
无论如何要递归使用隐式,因此 Seq[Seq[A]] 和 Seq[Seq[Seq[A]]] 等将被隐式转换为 PosnEnds 特征?在实践中,我可能不需要很大的深度,但最好使用一个优雅的解决方案,隐式转换任意深度的 Seq。
目前对于深度 2,我正在使用:
scala - Scala 找不到隐式,我不知道为什么 - 有人能指出我正确的方向吗?
我正在尝试编写一个工厂来创建案例类。我正在创建一个命令行工具,它接受案例类参数的字符串表示形式。无论如何,这个想法是将添加的更改限制为为新类型创建隐式,但我似乎无法超越起跑线。下面是一些尝试创建案例对象的代码(所以没有参数 - 最简单的案例),但 scalac 抱怨它“找不到参数工厂的隐式值”。一定是笨蛋,但我已经尝试了我能想到的一切。如果有人能指出我正确的方向,将不胜感激。谢谢。
scala - 缓存隐式解析
为了减少我的项目的编译时间,我正在缓存通过隐式查找解析的某些类型类。不过,这似乎有些麻烦,因为直接的实现不起作用:
隐式查找将其自己的未初始化定义视为有效实现。Alazy val
会以无限递归来炸毁堆栈。因此,我目前正在以这种方式处理它:
但这使得它过于复杂,并且缓存定义不能轻易使用其他缓存类型类(因为它们不是隐式的)。
此外,不幸的是,将值本身从范围中隐藏是行不通的。
有没有更优雅的方法来实现隐式解析缓存?
scala - Scala vs Haskell 类型类:“catchall”实例
以下 Haskell 类型类和实例:
通常像这样翻译成 Scala:
在 Haskell 中,我现在可以定义一种包罗万象的实例,从而为所有 Maybe 类型创建一个实例:
这定义了Able
for Maybe Int
、Maybe Bool
等的实例,前提是存在Able
for Int
、Bool
等的实例。
在 Scala 中如何做到这一点?
scala - 低优先级隐含的歧义
我有以下 Scala 代码片段:
基本上,我想要实现的是首先寻找一个隐含的Write
对象。如果没有,请回退到from的默认.toString
值。Any
LowPriorityWrites
但是,这种方法不起作用:
scala - 通用扩展 Scala 集合
我有一个Seq[(A, B)]
. 我想为这样的集合添加一个隐式方法,这样我就可以.toMultiMap
取回一个Map[A, Seq[B]]
.
这是我的第一次尝试:
但是,现在的问题是我总是得到一个Traversable
值。Map[A, Set[B]]
如果我这样做,我想取回一个Set[(A, B)].toMultiMap
。
所以,然后我尝试了这样的事情:
但是,它不起作用:
这样做的方法是什么?
scala - scala 类型需要隐式
我正在尝试建立以下
我有一个父泛型类
还有一些实现,例如
我有以下配置图:
我的问题是我应该用什么代替???。理想情况下,它应该类似于T : Writes
,因为我只关心这种类型是否已Writes
隐式实现,正如我将要介绍的那样Json.toJson
。它将与 一起编译Any
,但是该类应该Writes
隐式实现的信息会丢失。还是我应该使用不同的方法?我可能可以为我的所有结果案例类(例如LengthResult
)创建一个超类,但我想摆脱隐含。
scala - 函数类型定义中隐含的scala
我有以下抽象类:
和以下实现:
我之所以有这些apply
方法是因为我需要以下配置图:
这样我就可以通过包含其名称的字符串来初始化提供者:
现在,我的问题是所有这些提供者构造函数都需要两个隐式变量。但我不知道如何将它包含在函数定义(DB) => FieldProvider
中。因此,本质上,apply
方法签名应该类似于(DB)(implicit RequestAction, ExecutionContext) => FieldProvider
,但我不知道我正在尝试做的事情是否有正确的语法。
我也可以放弃并明确传递它们:
但是我必须在其他地方明确地传递它们,而不是providers("length")(db)
,我必须写providers("length")(db, implicitly[RequestAction], implicitly[ExecutionContext])
,这感觉不对。
scala - 通常将隐式添加到 TreeSet 和 TreeMaps
我想为 Scala 中的可变和不可变 TreeMap 和 TreeSet 添加一些有用的隐式。
这是我的尝试:
首先尝试定义具有
/li>headOption
/lastOption
(fromGenTraversableLike
) 和from
/to
/until
(fromSorted
) 的 TreeMap 和 TreeSet 的最小上界:写我的工具:
/li>
这仅部分有效:SortedSet#greaterThan
编译但TreeMap#greaterThan
不编译。我如何解决它?
scala - 将隐式变量从私有更改为公共导致“协变类型 T 发生在不变位置”错误
我的一个班级有一个 TypeTag:
TypeTag(在本例中为私有变量)由于不可序列化而导致了一些问题。所以尝试将其声明为@transient:
但是这个看似微不足道的改动却引发了一个大问题,Scala编译器抛出如下错误:
我所做的只是将私有变量更改为公共变量。我应该怎么做才能消除这种错误?