隐式不会导致在预期时转换类型

时间:2015-12-23 21:01:17

标签: scala implicit-conversion

package com.coryklein.lct.model

import org.scalatest.FlatSpec
import language.implicitConversions

class VertexTest extends FlatSpec {

  case class Vertex(x: Double, y: Double)

  implicit def tupleWrapper(tuple: (Double, Double)): Vertex =
    new Vertex(tuple._1, tuple._2)

  "A Vertex" should "be implicitly created from a tuple" in {
    val v: Vertex = (0, 0)
  }

}

在此代码中,(0,0)并未像我预期的那样隐式转换为Vertex。为什么呢?

1 个答案:

答案 0 :(得分:3)

查看编译器错误:

Error:(17, 21) type mismatch;  found   : (Int, Int)  required: VertexTest.this.Vertex
    val v: Vertex = (0, 0)
                    ^

(0,0)的类型为(Int,Int),与您创建的隐式(Double,Double)的定义不匹配,因此无法应用隐式。

要解决您的问题,请更改匹配的类型或定义新的隐式转换。