问题标签 [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 - 通过类名获取隐式实例
我想要做的是:从类名中获取一个隐式实例。我无法获得在运行时创建的类类型的隐式实例的主要问题。
我有的:
我想做的:以某种方式从类名中获取一个隐式实例。
错误:找不到参数 worker 的隐式值:Worker[typeHolder.Typed] val worker = getWorker(getClassType(className))
scala - Scala 中依赖类型的隐式解析
考虑以下代码:
上面的代码应该可以正常工作并打印hello
,但它无法编译:
即使我明确传入隐式参数:
我现在仍然收到此错误:
当然,我可以为它制作Foo
和Foo[T]
定义解码器,但这不是这个问题的重点——我想了解为什么上面的代码无法编译。
scala - scala 中的隐式类型如何参考此 https://youtu.be/hC4gGCD3vlY?t=263
scala 中的隐式类型如何参考此https://youtu.be/hC4gGCD3vlY?t=263工作。
我也不明白为什么他提到 convertAtoB 对象是静态的。
scala - 如何使用 Scala 元编程找到隐式函数?
在 Scala 语言中,类的隐式作用域在运行时被删除,例如,如果定义:
然后对于一个数组:
不可能写:
作为类型 A 并且其隐式范围在插入到 Array[Any] 后被删除。
这使得某些设计模式(例如类型类查找)无法在运行时应用(当类型信息仍然部分可用时)。就我而言,我想编写上面的程序而不在类型匹配中明确说明 A(因为在实际情况下,像 A 这样的类的数量可能是无数的)。是否有任何 scala 元编程包(首选 scalameta)能够在一个项目中执行此操作?我应该怎么做才能告诉 Java 运行时字节码“寻找运行时类的隐式,如果没有找到做其他事情”?
scala - 在scala中,为什么不能从同一范围推断出这个隐式参数?
我正在编写一个简单的 Apache Spark 实用程序,它会根据提供的初始值自动创建一个 AccumulatorV2:
2个隐式参数:canBuildFrom和converter应该分别由隐式函数和编译器预定义的类型转换提供。但是,当我尝试调用它时:
我收到以下错误信息:
为什么 scala 编译器找不到正确的隐式值?我应该怎么做才能解决它?
scala - 比较Scala中两个封闭类的隐式函数
我正在使用Location
来自另一个封闭 API 的对象,它已经有一个toString()
返回String
. 我只想要一个可以通过比较它们的值implicit
来比较两个Location
实例的toString()
函数。所以我可以去
scala - 如何实现 Functor[数据集]
我正在努力创建Functor[Dataset]
...的实例问题是,当您map
从A
到必须B
在Encoder[B]
隐式范围内时,但我不知道该怎么做。
当然,这段代码会引发编译错误,因为Encoder[B]
它不可用但我不能添加Encoder[B]
为隐式参数,因为它会改变 map 方法签名,我该如何解决这个问题?
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 中定义的隐式在控制器类中可见?
scala - 基于返回类型的Scala类型参数推断(函数vs方法)
我尝试在 Scala 中创建一个小型匹配库。我有以下类型表示一个匹配器,它代表一个类型的约束T
:
以及一个matches
检查该约束是否适用于给定实例的函数:
有了这个,我希望能够编写如下检查:
可以在任何容器上contains
进行抽象。我使用类型类尝试了以下抽象:
然后我可以用它来定义contains
函数:
有两个隐式定义,一个用于Option
:
和Iterable
:
但是,当我每次调用matches
. 他们都是一样的:
似乎类型推断无法正确推断类型,这就是两个隐式匹配的原因。
如何matches
定义函数没有歧义?
我还尝试使用隐式转换将matches
函数直接添加到任何类型:
这工作得很好:
我不明白为什么matches
方法不起作用时功能不起作用?看起来问题在于推理仅基于返回类型。例如,不是contains
我可以isEmpty
使用 not 参数,它再次适用于matches
方法但不适用于函数。
完整的代码清单在这个gist中。
scala - 移除对具有 Unit 返回类型的函数的调用时出现奇怪的 Scala 编译器错误,这怎么可能?
这是一个奇怪的情况:
如果我注释掉feed_usingExplicitTypeClassInstance
下面的调用,那么我会收到编译器错误。
非常令人费解。有什么解释吗?
我的意思是,我注释掉一个函数调用(它不返回任何值),然后代码不再编译?
这在理论上应该是可能的吗?在任何编程语言中?
我的意思是我注释掉类似println("hello")
的东西然后代码不再编译了?
当然,如果我注释掉声明之类的东西是可以理解的,但是调用一个不返回任何东西的函数?
这是错误:
编辑:
如果我插入该行:
前:
然后代码再次编译,即使该行
被注释掉了。