在scala中转换用于理解的结果类型 case类数组_8to24[T](val-arr:Array[T]){ def tail():数组[T]={ 对于(i

在scala中转换用于理解的结果类型 case类数组_8to24[T](val-arr:Array[T]){ def tail():数组[T]={ 对于(i,scala,types,for-comprehension,Scala,Types,For Comprehension,So),问题在于它不知道如何创建未知类型的数组T。数组是一种特殊类型的容器,因为它们由本机java数组支持,因此在实例化数组时需要具有元素类型。向声明中添加清单可以解决此问题: def swaps(arr:Array[Int]):Array[Int] = { for(i <- 0 until arr.length toArray) yield { if((i+1)%2 != 0 && i+1<arr.length){ a

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

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)
      }
    }
  }
case类数组_8to24[T:Manifest](val-arr:Array[T]){
def tail():数组[T]=

对于(i)数组(b,a)情形x=>x}.toArray

如何
arr.tail
?Manifest是scala反射库的一部分,它携带有关类型的一些信息,例如它所引用的实际运行时类。将其添加到类声明中会创建一个隐式参数,该参数将在运行时可用,并可用于实例化f正确的类型。基本上,当您创建类的具体实例(如
Array\u 8to24(Array(1,2,3)
)时,编译器将为
Int
生成一个
Manifest
实例,并将其传递给类,以便保留类型信息,并可在调用
tail
时使用。
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)
      }
    }
  }
case class Array_8to24[T : Manifest](val arr:Array[T]) {
  def tail(): Array[T] = 
    for(i <- 1 until arr.length toArray) yield arr(i)
}