【问题标题】:What is meant by a type that denotes an implicit conversion表示隐式转换的类型是什么意思
【发布时间】:2020-05-30 09:41:00
【问题描述】:

scala language specification, section 7.2 是关于隐式作用域的: 它解释了隐式作用域是以某种方式与T 类型的部分相关联的模块。下面列出了 T 的各个部分。其中之一是

如果T 表示使用以下方法隐式转换为类型 参数类型T1,…,Tn 和结果类型U,部分的并集 T1,…,Tn 和 U;

我无法从中做出正面或反面。我不明白类型 T 如何表示隐式转换。

这部分隐式范围规范是什么意思?

【问题讨论】:

    标签: scala implicit


    【解决方案1】:

    我相信这是指以下情况

    case class Foo(v: Int)
    object Foo {
      implicit def stringToFoo(s: String) = Foo(42)
    }
    
    def f[A](v: A)(implicit ev: A => Foo) = ev(v)
    
    f("woohoo")
    

    其中隐式转换type T = A => Foo,而Foo 是与类型参数A 关联的部分,因此object Foo 成为隐式范围的一部分,stringToFoo 隐式转换是无需导入即可解决。

    【讨论】:

    • 我不认为这里使用了这个规则; A => FooFunction1[A, Foo],所以它的部分包括 Foo 参数化类型的规则。 (我添加了自己的答案。)
    【解决方案2】:

    以下是示例:

    trait A
    object A {
      implicit def f(a: A): B = null
    }
    
    trait B
    
    val b: B = new A {} // compiles
    

    trait A
    
    trait B
    object B {
      implicit def f(a: A): B = null
    }
    
    val b: B = new A {} // compiles
    

    T 表示从AB (val b: B = new A {}) 的隐式转换,它表示使用参数类型为T1,…,Tn = A 和结果类型为U = B 的方法进行的转换。所以 T 的 partsA 的部分和 B 的部分的并集。所以隐式可以定义为T(即AB)部分的基类的伴生对象的成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2015-08-09
      • 1970-01-01
      • 2011-01-07
      • 2015-02-20
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多