mplain
06/11/2020, 12:30 PMclass Matrix<N : Number>(private val rows: Int, private val columns: Int, f: (Int, Int) -> N) : List<List<N>>
by List(rows, { i -> List(columns) { j -> f.invoke(i, j) } }) {
Now I want to add a secondary constructor that would take an iterable (list or array) of elements, like this:
constructor(rows: Int, columns: Int, values: Iterable<N>) {
val iterator = values.iterator()
Matrix(rows, columns) { _, _ -> iterator.next() }
}
This doesn't work, says "call to primary constructor expected"
Any advice on how to address this problem, Kotlin-style?Joost Klitsie
06/11/2020, 12:35 PMconstructor(rows: Int, columns: Int, values: Iterable<N>) : this(rows, columns...)
mplain
06/11/2020, 12:36 PMJoost Klitsie
06/11/2020, 12:36 PMconstructor(rows: Int, columns: Int, values: Iterable<N>): this(rows, columns, { _, _ -> values.iterator().next() })
mplain
06/11/2020, 12:37 PMJoost Klitsie
06/11/2020, 12:37 PMmplain
06/11/2020, 12:37 PMJoost Klitsie
06/11/2020, 12:37 PMMatrix(...)
mplain
06/11/2020, 12:38 PMJoost Klitsie
06/11/2020, 12:38 PMmplain
06/11/2020, 12:38 PMJoost Klitsie
06/11/2020, 12:38 PMJoost Klitsie
06/11/2020, 12:38 PMmplain
06/11/2020, 12:39 PMmplain
06/11/2020, 12:39 PMmplain
06/11/2020, 12:39 PMJoost Klitsie
06/11/2020, 12:40 PMcompanion object {
operator fun <N: Number> invoke(rows: Int, columns: Int, values: Iterable<N>) {
val iterator = values.iterator()
Matrix(rows, columns) { _, _ -> iterator.next() }
}
}
Joost Klitsie
06/11/2020, 12:40 PMMatrix(5, 5, listOf(5))
Joost Klitsie
06/11/2020, 12:41 PMmplain
06/11/2020, 12:41 PMmplain
06/11/2020, 12:42 PMJoost Klitsie
06/11/2020, 12:42 PMmplain
06/11/2020, 12:42 PMmplain
06/11/2020, 12:43 PMJoost Klitsie
06/11/2020, 12:43 PMcompanion object {
operator fun <N: Number> invoke(rows: Int, columns: Int, values: Iterable<N>): Matrix<N> {
val iterator = values.iterator()
return Matrix(rows, columns) { _, _ -> iterator.next() }
}
}
This helper function instantiates a Matrix<N> objectmplain
06/11/2020, 12:43 PMJoost Klitsie
06/11/2020, 12:43 PMmplain
06/11/2020, 12:43 PMJoost Klitsie
06/11/2020, 12:44 PMmplain
06/11/2020, 12:44 PMmplain
06/11/2020, 12:44 PMmplain
06/11/2020, 12:44 PMmplain
06/11/2020, 1:03 PMconstructor(rows: Int, columns: Int, values: List<N>) : this(rows, columns, { i, j -> values[i * columns + j] })