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

converting type result of for-comprehension in scala

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

编译器说 tail() returns 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() 中 return Array[T]?

所以,问题是它不知道如何创建未知类型的数组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