var channelsNumber = track.getNumberOfChannels()
var framesNumber = lastFrame - firstFrame
var frames = Array.ofDim[Int](channelsNumber)(framesNumber)
System.out.println(frames.length);
System.out.println(frames.length);
我尝试定义二维整数数组。我得到这个错误:
[error] .../test.scala:58: type mismatch;
[error] found : Int
[error] required: scala.reflect.ClassManifest[Int]
[error] var frames = Array.ofDim[Int](channelsNumber)(framesNumber)
[error] ^
[error] one error found
什么是" scale .reflect. classmanifest [Int]"?为什么channelsNumber通过,而framesNumber(也是一个整数)没有通过?
现在,您正在调用您不想要的方法ofDim [T] (n1: Int)(implicit arg0: ClassManifest[T])
。将调用更改为Array.ofDim[Int](channelsNumber,framesNumber)
,方法ofDim [T] (n1: Int, n2: Int)(implicit arg0: ClassManifest[T])
将被调用。您希望隐式参数group保持隐式。
类清单是在泛型类中保存类型信息的一种方法。
首先你的错误:ofDim在一个参数列表中获取所有维度。你需要
Array.ofDim[Int](channelsNumber, framesNumber)
第二,ClassManifest
。由于类型擦除,并且在JVM中,数组非常像泛型,但不是泛型(其中包括没有类型擦除),泛型方法ofDim
需要传递元素的类型。这就是ClassManifest,它接近于在java中传递一个Class(您必须在java中做同样的事情),或者在Collection中传递一个正确类型的空数组。toArray-如果你有一个通用的方法,必须返回一个数组)这是一个implicit
参数,也就是说,有另一个参数列表与这个参数,但scala编译器将尝试自动填充它,而不必在代码中编写它。但是如果您给出第二个参数列表,则意味着您打算自己传递ClassManifest
。