代码之家  ›  专栏  ›  技术社区  ›  Eastsun

scala2.8中的隐式转换问题

  •  8
  • Eastsun  · 技术社区  · 14 年前

    我的第一次尝试如下:

    implicit def t2seq[A,B,C](t: (A,B))(implicit env: (A,B) <:< (C,C)): Seq[C] = {
        val (a,b) = env(t)
        Seq(a,b)
    }
    

    scala> (1,2): Seq[Int]
    <console>:7: error: type mismatch;
     found   : (Int, Int)
     required: Seq[Int]
           (1,2): Seq[Int]
           ^
    

    class Tuple2W[A,B](t: (A,B)) {
        def toSeq[C](implicit env: (A,B) <:< (C,C)): Seq[C] = {
            val (a,b) = env(t)
            Seq(a,b)
        }
    }
    implicit def t2tw[A,B](t: (A,B)): Tuple2W[A,B] = new Tuple2W(t)
    

    用例:

    scala> (1,2).toSeq
    res0: Seq[Int] = List(1, 2)
    

    我不知道为什么第一个解决方案没有按预期效果。

    1 回复  |  直到 14 年前
        1
  •  9
  •   Moritz    14 年前

    你只需要使用 <:<

    implicit def t2seq[A <: C,B <: C,C](t: (A,B)) = Seq(t._1, t._2)
    

    足够了。