在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.tail
或 arr.drop(1)
,对吧?
swaps
可能是 arr.grouped(2).flatMap { case Array(a,b) => Array(b,a) case x => x }.toArray
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.tail
或 arr.drop(1)
,对吧?
swaps
可能是 arr.grouped(2).flatMap { case Array(a,b) => Array(b,a) case x => x }.toArray