在scala中返回动态类型的序列

时间:2017-03-28 08:57:08

标签: scala implicit-conversion return-type

我尝试定义一个函数,该函数应返回1n类型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),其中包含整数而不是字符串。

1 个答案:

答案 0 :(得分:6)

让我们定义createSeq,要求从Int => TInt隐式转换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"),但省略了"