在scala中转换for-comprehension的类型结果

时间:2016-06-09 22:53:14

标签: scala types for-comprehension

case class Array_8to24[T](val arr:Array[T]) {
  def tail():Array[T] = {
    for(i <- 1 until arr.length toArray) yield arr(i)
  }
}

编译器说tail()返回ArraySeq [T],我期望Array [T]

BTW swaps()按预期工作

def swaps(arr:Array[Int]):Array[Int] = {
    for(i <- 0 until arr.length toArray) yield {      
      if((i+1)%2 != 0 && i+1<arr.length){
        arr(i + 1)
      }else {
        arr(if(i==arr.length-1 && arr.length%2!=0) i else i - 1)
      }
    }
  }

如何从tail()返回Array [T]?

1 个答案:

答案 0 :(得分:2)

所以,问题在于它不知道如何创建未知类型T的数组。数组是一种特殊的容器,因为它们由本机java数组支持,因此在实例化数组时需要具有元素类型。在声明中添加清单应该修复它:

case class Array_8to24[T : Manifest](val arr:Array[T]) {
  def tail(): Array[T] = 
    for(i <- 1 until arr.length toArray) yield arr(i)
}

你知道你可以做arr.tailarr.drop(1),对吗? swaps可以是arr.grouped(2).flatMap { case Array(a,b) => Array(b,a) case x => x }.toArray