我尝试定义一个函数,该函数应返回1
到n
类型T
的范围。在这里,T
作为用户输入,implicit def
方法可用于将int
转换为T
。即,我想拥有但不起作用的是:
def createSeq[T](n: Int): Seq[T] =
1 to n map _.asInstanceOf[T]
例如,我可以调用createSeq[Int](3)
,它就像魅力一样。但是,当我调用createSeq[String](3)
时,它仍会返回Vector(1,2,3)
,其中包含整数而不是字符串。
答案 0 :(得分:6)
让我们定义createSeq
,要求从Int => T
到Int
隐式转换T
,如下:
def createSeq[T](n: Int)(implicit toT: Int => T): Seq[T] =
1.to(n).map(toT)
然后你可以这样做:
scala> createSeq[Int](3)
res: Seq[Int] = Vector(1, 2, 3)
让我们添加隐式转化Int => String
:
implicit def toStr(n: Int): String = n.toString
然后你可以这样做:
scala> createSeq[String](3)
res: Seq[String] = Vector(1, 2, 3)
注意:上一个Vector(1, 2, 3)
的类型为Seq[String]
,实际上是Vector("1", "2", "3")
,但省略了"
。