我想在Scala中编写一个类,它采用任意数量的字节或像这样的布尔值
class Bytes(data: Byte*) {
def this(data: Boolean*) = this {
val res: Array[Byte] = convBools2Bytes(data)
res: _*
}
// […]
}
其中convBools2Bytes
是将Array[Boolean]
转换为Array[Byte]
的函数:
def convBools2Bytes(data: Array[Boolean]): Array[Byte]
这给了我以下编译器错误:
[error] Bytes.scala:5: no `: _*' annotation allowed here
[error] (such annotations are only allowed in arguments to *-parameters)
[error] res: _*
[error] ^
据我了解,res: _*
语句将Array[Byte]
转换为重复参数列表(如“Programming in Scala”, 2nd Ed.中第8.8节所述)。
为什么会出现这样的错误,我该如何避免呢?
答案 0 :(得分:6)
正如编译器所说,你可能只在vararg参数的参数中使用它。您试图让块返回扩展的vararg列表,这是不允许的。 如果你想使用该块,那么:
this({
val res: Array[Byte] = convBools2Bytes(data)
res
}: _*)
否则这也应该没问题
this(convBools2Bytes(data): _*)
但是你会遇到另一个问题,擦除会导致两者都有相同的签名并阻止编译。 我认为你最好不要超载