我正在尝试在 Kotlin 中创建一个非常简单的通用 NDArray 类,它将 lambda 表达式作为 init 函数。
class NDArray<T>(i: Int, j: Int, f: (Int) -> T) {
val values: Array<T> = Array(i * j, f)
}
典型的用法是:
fun main(args: Array<String>){
val m = NDArray(4, 4, ::zero)
}
fun zero(i: Int) = 0.0
我的问题是 Kotlin 编译器抱怨构造函数中值的初始化
values = Array(i * j, f)
说“不能使用‘T’作为具体化类型参数。请使用类”。为什么 ?
EDIT:
如果我用我自己的 MyArray 替换 Kotlin Array 实现,它会编译:
class NDArray<T>(i: Int, j: Int, f: (Int) -> T) {
val values: MyArray<T> = MyArray(i * j, f)
}
class MyArray<T>(i:Int, init: (Int) -> T) {
...
}
不知道为什么当 MyArray 具有相同的构造函数时,Kotlin 对待 MyArray 的方式与常规 Array 不同?