我正在尝试在Scala中使用库dcm4che3
我的Scala代码是
val item: Attributes = new Attributes
val x: Int = ints.toArray.length
val vr: VR = VR.OW
val intArray: Array[Int] = ints.toArray
item.setInt(Tag.LUTData, vr, intArray)
我收到错误
Error:(125, 10) overloaded method value setInt with alternatives:
(x$1: String,x$2: Int,x$3: org.dcm4che3.data.VR,x$4: Int*)Object <and>
(x$1: Int,x$2: org.dcm4che3.data.VR,x$3: Int*)Object
cannot be applied to (Int, org.dcm4che3.data.VR, Array[Int])
item.setInt(Tag.LUTData, vr, intArray)
我在错误中注意到它要求Int *。 java签名是
setInt(int,org.dcm4che3.data.VR,int[])
我理解Array [Int]是int []的scala等价物。什么是Int *?为什么这不起作用?
答案 0 :(得分:3)
Int*
是一个varargs参数,相当于Java int...
。就像Java一样,你可以传递数组或任意数量的参数,但是为了避免在传递null
时你在Java中产生的歧义,Scala中有一个特殊的语法。按如下方式调用该函数: -
item.setInt(Tag.LUTData, vr, intArray:_*)
实际上,您可能根本不需要数组:您可以将任何序列传递给Scala中的varargs函数,而不仅仅是数组,因此如果ints
变量是某种序列,您可以将其传递到intArray
,并完全删除intArray
。
另请参阅What does `:_*` (colon underscore star) do in Scala?,这与您的问题相反。