Scala的多维数组再一次


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

相关内容

  • 没有找到相关文章

最新更新