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

scala - 通过类名获取隐式实例

我想要做的是:从类名中获取一个隐式实例。我无法获得在运行时创建的类类型的隐式实例的主要问题。

我有的:

我想做的:以某种方式从类名中获取一个隐式实例。

错误:找不到参数 worker 的隐式值:Worker[typeHolder.Typed] val worker = getWorker(getClassType(className))

0 投票
1 回答
220 浏览

scala - Scala 中依赖类型的隐式解析

考虑以下代码:

上面的代码应该可以正常工作并打印hello,但它无法编译:

即使我明确传入隐式参数:

我现在仍然收到此错误:

当然,我可以为它制作FooFoo[T]定义解码器,但这不是这个问题的重点——我想了解为什么上面的代码无法编译。

0 投票
1 回答
47 浏览

scala - scala 中的隐式类型如何参考此 https://youtu.be/hC4gGCD3vlY?t=263

scala 中的隐式类型如何参考此https://youtu.be/hC4gGCD3vlY?t=263工作。

我也不明白为什么他提到 convertAtoB 对象是静态的。

0 投票
0 回答
134 浏览

scala - 如何使用 Scala 元编程找到隐式函数?

在 Scala 语言中,类的隐式作用域在运行时被删除,例如,如果定义:

然后对于一个数组:

不可能写:

作为类型 A 并且其隐式范围在插入到 Array[Any] 后被删除。

这使得某些设计模式(例如类型类查找)无法在运行时应用(当类型信息仍然部分可用时)。就我而言,我想编写上面的程序而不在类型匹配中明确说明 A(因为在实际情况下,像 A 这样的类的数量可能是无数的)。是否有任何 scala 元编程包(首选 scalameta)能够在一个项目中执行此操作?我应该怎么做才能告诉 Java 运行时字节码“寻找运行时类的隐式,如果没有找到做其他事情”?

0 投票
0 回答
142 浏览

scala - 在scala中,为什么不能从同一范围推断出这个隐式参数?

我正在编写一个简单的 Apache Spark 实用程序,它会根据提供的初始值自动创建一个 AccumulatorV2:

2个隐式参数:canBuildFrom和converter应该分别由隐式函数和编译器预定义的类型转换提供。但是,当我尝试调用它时:

我收到以下错误信息:

为什么 scala 编译器找不到正确的隐式值?我应该怎么做才能解决它?

0 投票
2 回答
58 浏览

scala - 比较Scala中两个封闭类的隐式函数

我正在使用Location来自另一个封闭 API 的对象,它已经有一个toString()返回String. 我只想要一个可以通过比较它们的值implicit来比较两个Location实例的toString()函数。所以我可以去

0 投票
1 回答
278 浏览

scala - 如何实现 Functor[数据集]

我正在努力创建Functor[Dataset]...的实例问题是,当您mapA到必须BEncoder[B]隐式范围内时,但我不知道该怎么做。

当然,这段代码会引发编译错误,因为Encoder[B]它不可用但我不能添加Encoder[B]为隐式参数,因为它会改变 map 方法签名,我该如何解决这个问题?

0 投票
2 回答
115 浏览

scala - 玩找不到隐含定义

我正在写一个JSON Writes. 在models/Users.scala,我定义了一个implicit带有定义的对象implicit

在我的controller课堂上,我已经导入models._并定义了控制器,如下所示:

我收到以下编译错误。

No Json serializer found for type models.UsersResource. Try to implement an implicit Writes or Format for this type.对于代码val json = Json.toJson(userResource);

问题似乎是 Play 找不到隐式写入。如果我在控制器中移动隐式定义而不是在模型中定义,则代码有效。如何使 model/user.scala 中定义的隐式在控制器类中可见?

0 投票
1 回答
119 浏览

scala - 基于返回类型的Scala类型参数推断(函数vs方法)

我尝试在 Scala 中创建一个小型匹配库。我有以下类型表示一个匹配器,它代表一个类型的约束T

以及一个matches检查该约束是否适用于给定实例的函数:

有了这个,我希望能够编写如下检查:

可以在任何容器contains进行抽象。我使用类型类尝试了以下抽象:

然后我可以用它来定义contains函数:

有两个隐式定义,一个用于Option

Iterable

但是,当我每次调用matches. 他们都是一样的:

似乎类型推断无法正确推断类型,这就是两个隐式匹配的原因。

如何matches定义函数没有歧义?

我还尝试使用隐式转换将matches函数直接添加到任何类型:

这工作得很好:

我不明白为什么matches方法不起作用时功能不起作用?看起来问题在于推理仅基于返回类型。例如,不是contains我可以isEmpty使用 not 参数,它再次适用于matches方法但不适用于函数。

完整的代码清单在这个gist中。

0 投票
2 回答
103 浏览

scala - 移除对具有 Unit 返回类型的函数的调用时出现奇怪的 Scala 编译器错误,这怎么可能?

这是一个奇怪的情况:

如果我注释掉feed_usingExplicitTypeClassInstance下面的调用,那么我会收到编译器错误。

非常令人费解。有什么解释吗?

我的意思是,我注释掉一个函数调用(它不返回任何值),然后代码不再编译?

这在理论上应该是可能的吗?在任何编程语言中?

我的意思是我注释掉类似println("hello")的东西然后代码不再编译了?

当然,如果我注释掉声明之类的东西是可以理解的,但是调用一个不返回任何东西的函数?

这是错误:

编辑:

如果我插入该行:

前:

然后代码再次编译,即使该行

被注释掉了。