implicits相关内容

什么是 Scala 标识符“隐式"?

我曾在 Scala 示例中看到过一个名为 implicitly 的函数.它是什么,如何使用? 此处示例: scala>密封特征 Foo[T] { def apply(list : List[T]) : Unit };对象 Foo {|隐式 def stringImpl = new Foo[String] {|def apply(list : List[String]) = println( ..
发布时间:2021-12-07 12:49:35 其他开发

如何在 Scala 中链接隐式?

pimp-my-library 模式允许我通过提供从类到实现该方法的类的隐式转换来向类添加方法. Scala 不允许发生两个这样的隐式转换,但是,所以我不能使用隐式 A 从 A 到 C 到B 和另一个隐含的 B 到 C.有没有办法绕过这个限制? 解决方案 Scala 对添加方法的自动转换有一个限制,即它不会在尝试查找方法时应用多个转换.例如: class A(val n: Int) ..
发布时间:2021-12-07 12:41:55 其他开发

什么是 Scala 上下文和视图边界?

简单来说,上下文和视图边界是什么,它们之间有什么区别? 一些易于理解的示例也很棒! 解决方案 我以为这已经有人问过了,但是,如果是这样,那么问题在“相关"栏中并不明显.所以,这里是: 什么是视图边界? A view bound 是 Scala 中引入的一种机制,用于启用某种类型的 A 就好像它是某种类型的 B.典型的语法是这样的: def f[A 换句话说,A 应该 ..
发布时间:2021-12-07 12:35:14 其他开发

Scala 在哪里寻找隐式?

对于 Scala 新手来说,一个隐式问题似乎是:编译器在哪里寻找隐式?我的意思是隐含的,因为这个问题似乎从来没有完全形成,好像没有词可以形容.:-) 例如,下面 integral 的值从何而来? scala>导入 scala.math._导入 scala.math._标度>def foo[T](t: T)(隐式积分:Integral[T]) {println(integral)}foo: [T] ..
发布时间:2021-12-07 12:34:30 其他开发

无法获取Scala类型推断

总体目标: 例如,假设我要开发一个非常可插拔的问题跟踪器.它的核心实现可能仅支持票证ID和描述.其他扩展可能会增加对其他各个字段的支持,但是这些字段可能存在于同一表的数据库中.即使没有,对数据库的查询数量也不必随扩展数量的增加而增加.他们应该能够为查询的定义做出贡献. Item[A, B, R[_]]将表示一列,其中A是表类型(具有列表示形式),B是数据类型,而R是类型构造函数,表示类 ..
发布时间:2020-06-26 18:43:14 其他开发

安全地链接隐式转换

您可以执行此操作以将隐式转换转换为链: package language object chainedImplicits { implicit def chainImplicits[A, B, C](a: A)(implicit conv1: A => B, conv2: B => C): C = conv2(conv1(a)) } 但这显然不安全. 尽管如此,我看不到任何问 ..
发布时间:2020-06-26 18:42:51 其他开发

如何为隐式方法实现中间类型?

假设我想在控件之外的现有类型A中提供方法foo.据我所知,在Scala中执行此操作的规范方法是实现从A到实现foo的某种类型的隐式转换.现在我基本上看到了两个选择. 为此目的定义一个单独的甚至是隐藏的类: protected class Fooable(a : A) { def foo(...) = { ... } } implicit def a2fooable(a : A) = ..
发布时间:2020-06-26 18:42:07 其他开发

具有两个通用参数的上下文范围

在Scala中,我可以使用上下文范围: def sort[T : Ordered](t: Seq[T]) 表示与以下内容相同的意思: def sort[T](t: Seq[T])(implicit def Ordered[T]) 如果我有一个带有两个通用参数的类,该怎么办? IE.我希望能够确保我有一个Writer[T, String].有没有可以使用上下文边界(T : ... ..
发布时间:2020-06-26 18:41:18 其他开发

具有协方差的隐式分辨率

为什么Foo不变时以下代码为什么起作用,而当它协变时为什么不起作用? Foo的协变版本会产生类型错误,表明在useF1的调用中,参数的类型为Foo[T],但必须为F1. useF2也会产生类似的错误. 如果从Foo中删除了方差注释,则该代码有效.与F1的模式匹配揭示了T = Int的事实,因此x的类型为Foo[Int].隐式转换函数用于在useF1的参数中将Foo[Int]转换为F1.对于F ..
发布时间:2020-06-26 18:41:08 其他开发

通过隐式测试两种Scala无形状HList类型的等效性

我对测试两个HList异构记录是否“等效"感兴趣;也就是说,它们具有相同的键/值对,但不一定以相同的顺序.是否存在预定义的类型谓词,该谓词在下面的代码片段中做什么? // shapeless heterogeneous records with "equivalent" types. // these should compile if given as the arguments to ' ..
发布时间:2020-06-26 18:40:59 其他开发

如何正确定义lambda类型?

我使用=:=作为示例类型lambda来制作简单的最小示例. =:=类型有两个参数,我想在类型级别使用一个参数. 我采用朴素的实现type Curry[G] = {type l[L] = L =:= G},但在实际使用中会导致错误: type X = Int type Y = Int type CurryInt[T] = T =:= Int type Curry[G] = {ty ..
发布时间:2020-06-26 18:40:28 其他开发