Proveedor de matriz genérica bidimensional
Estoy tratando de implementar proveedor genérico de matriz bidimensional en Kotlin:
public fun <T> array2dim(sizeOuter: Int, sizeInner: Int): Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) }
pero no puede entender cómo superar el problema.
El comstackdor dice: Error en la interfaz de tipo: no hay información suficiente para inferir el parámetro T en el constructor Array (tamaño: Int, init: (Int) → T) Especifíquelo explícitamente.
En primer lugar, a su llamada interna al constructor Array
le falta su segundo parámetro init
, el lambda donde crea los elementos iniciales que contendrá la Array
. Si, por ejemplo, quiere completarlo con el mismo elemento, podría pasarlo como parámetro:
fun <T> array2dim(sizeOuter: Int, sizeInner: Int, element: T): Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) { element } }
También puede usar los índices externo e interno y crear elementos iniciales basados en aquellos:
fun <T> array2dim(sizeOuter: Int, sizeInner: Int, createElement: (Int, Int) -> T): Array<Array<T>> = Array(sizeOuter) { outerIndex -> Array(sizeInner) { innerIndex -> createElement(outerIndex, innerIndex) } }
Si no tiene nada para inicializar su Array
al crearla, considere la posibilidad de crear Array
internos arrayOfNulls
con arrayOfNulls
.
Esto todavía le dará un error acerca de no poder acceder a T
; vea esta respuesta a una pregunta relacionada para la explicación, pero deberá marcar su T
como reified
(y consecuentemente, su function como en inline
):
inline fun <reified T> array2dim(sizeOuter: Int, sizeInner: Int, element: T) : Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) { element } }