implicits相关内容
第一个示例成功地找到了到方法 foo(String) 的隐式转换,但是一旦我添加了类型参数(参见 fails),编译不会解决不了了: 对象工作{A类{def foo(): 字符串 = ???}隐式类 PimpedA(a: A) {def foo(i: String): String = ???}val a = 新的 A()a.foo("test")//编译}object failed {//和
..
假设我有一个类型类来证明 Shapeless 余积中的所有类型都是单例类型: import shapeless._trait AllSingletons[A, C 我们可以证明它与简单的 ADT 一起工作: 密封性状 Foocase 对象 Bar 扩展了 Foocase 对象 Baz 扩展了 Foo 然后: scala>隐式[AllSingletons[Foo, Bar.type :+
..
我曾在 Scala 示例中看到过一个名为 implicitly 的函数.它是什么,如何使用? 此处示例: scala>密封特征 Foo[T] { def apply(list : List[T]) : Unit };对象 Foo {|隐式 def stringImpl = new Foo[String] {|def apply(list : List[String]) = println(
..
pimp-my-library 模式允许我通过提供从类到实现该方法的类的隐式转换来向类添加方法. Scala 不允许发生两个这样的隐式转换,但是,所以我不能使用隐式 A 从 A 到 C 到B 和另一个隐含的 B 到 C.有没有办法绕过这个限制? 解决方案 Scala 对添加方法的自动转换有一个限制,即它不会在尝试查找方法时应用多个转换.例如: class A(val n: Int)
..
简单来说,上下文和视图边界是什么,它们之间有什么区别? 一些易于理解的示例也很棒! 解决方案 我以为这已经有人问过了,但是,如果是这样,那么问题在“相关"栏中并不明显.所以,这里是: 什么是视图边界? A view bound 是 Scala 中引入的一种机制,用于启用某种类型的 A 就好像它是某种类型的 B.典型的语法是这样的: def f[A 换句话说,A 应该
..
对于 Scala 新手来说,一个隐式问题似乎是:编译器在哪里寻找隐式?我的意思是隐含的,因为这个问题似乎从来没有完全形成,好像没有词可以形容.:-) 例如,下面 integral 的值从何而来? scala>导入 scala.math._导入 scala.math._标度>def foo[T](t: T)(隐式积分:Integral[T]) {println(integral)}foo: [T]
..
我是 Spark 2.0 的新手,我在我们的代码库中使用了数据集.我有点注意到我需要在我们的代码中到处import spark.implicits._.例如: 文件AA类{定义作业(火花:SparkSession)= {导入 spark.implcits._//创建数据集dsval b = 新 B(火花)b.doSomething(ds)做某事(ds)}private def doSomethi
..
给出Scala中这个(公认的)代码片段: object Main extends App { class X { def foo = 1 } def f[A](value: A)(implicit ev: A
..
总体目标: 例如,假设我要开发一个非常可插拔的问题跟踪器.它的核心实现可能仅支持票证ID和描述.其他扩展可能会增加对其他各个字段的支持,但是这些字段可能存在于同一表的数据库中.即使没有,对数据库的查询数量也不必随扩展数量的增加而增加.他们应该能够为查询的定义做出贡献. Item[A, B, R[_]]将表示一列,其中A是表类型(具有列表示形式),B是数据类型,而R是类型构造函数,表示类
..
关于这个问题有很多问题,但是阅读一个小时之后,我仍然无法理解我做错了什么.这是我拥有的代码(Scala 2.11)的最小示例: object Anomalies { sealed abstract class AnomalyType(val priority: Int) extends Ordered[AnomalyType] {
..
在我添加隐式排序证据之前, 类型推断在此示例中工作正常.类型推断规则(从左到右以及跨参数列表)似乎很满意,但是关于隐式的某些事情打破了它. case class Insert[I, O : Ordering](arg: I) def execute[I,O](req: Insert[I,O]): O = null.asInstanceOf[O] val result: Int = exec
..
您可以执行此操作以将隐式转换转换为链: package language object chainedImplicits { implicit def chainImplicits[A, B, C](a: A)(implicit conv1: A => B, conv2: B => C): C = conv2(conv1(a)) } 但这显然不安全. 尽管如此,我看不到任何问
..
假设我想在控件之外的现有类型A中提供方法foo.据我所知,在Scala中执行此操作的规范方法是实现从A到实现foo的某种类型的隐式转换.现在我基本上看到了两个选择. 为此目的定义一个单独的甚至是隐藏的类: protected class Fooable(a : A) { def foo(...) = { ... } } implicit def a2fooable(a : A) =
..
在Scala中,我可以使用上下文范围: def sort[T : Ordered](t: Seq[T]) 表示与以下内容相同的意思: def sort[T](t: Seq[T])(implicit def Ordered[T]) 如果我有一个带有两个通用参数的类,该怎么办? IE.我希望能够确保我有一个Writer[T, String].有没有可以使用上下文边界(T : ...
..
我有一个这样的特征: trait CanFold[-T, R] { def sum(acc: R, elem: T): R def zero: R } 具有这样的功能: def sum[A, B](list: Traversable[A])(implicit adder: CanFold[A, B]): B = list.foldLeft(adder.zero)((a
..
我知道使用没有原型的函数是错误的. 但是当我摆弄时,我遇到了这种奇怪和冲突的行为. test1 #include #include void main(){ char c='\0'; float f=0.0; xof(c,f);/* at this point imp
..
为什么Foo不变时以下代码为什么起作用,而当它协变时为什么不起作用? Foo的协变版本会产生类型错误,表明在useF1的调用中,参数的类型为Foo[T],但必须为F1. useF2也会产生类似的错误. 如果从Foo中删除了方差注释,则该代码有效.与F1的模式匹配揭示了T = Int的事实,因此x的类型为Foo[Int].隐式转换函数用于在useF1的参数中将Foo[Int]转换为F1.对于F
..
我对测试两个HList异构记录是否“等效"感兴趣;也就是说,它们具有相同的键/值对,但不一定以相同的顺序.是否存在预定义的类型谓词,该谓词在下面的代码片段中做什么? // shapeless heterogeneous records with "equivalent" types. // these should compile if given as the arguments to '
..
是否存在一种优雅的解决方案,以某种方式清理隐式参数列表,使签名更加简洁? 我有这样的代码: import shapeless._ import shapeless.HList._ import shapeless.ops.hlist._ import shapeless.poly._ trait T[I, O] extends (I => O) trait Validator[P] o
..
我使用=:=作为示例类型lambda来制作简单的最小示例. =:=类型有两个参数,我想在类型级别使用一个参数. 我采用朴素的实现type Curry[G] = {type l[L] = L =:= G},但在实际使用中会导致错误: type X = Int type Y = Int type CurryInt[T] = T =:= Int type Curry[G] = {ty
..