Универсальная матрица в Scala

Я пытаюсь создать общую матрицу в Scala, используя класс case. Я пишу здесь, потому что буду очень признателен за любые отзывы о моем решении от любого, кто обладает глубоким пониманием.

case class Matrix[T](data: Vector[Vector[T]]){

  def foreachRowCol(f: (Int, Int, T) => Unit): Unit = 
    for (r <- 0 until data.size) {
      for (c <- 0 until data(r).size) {
        f(r, c, data(r)(c)) 
      }
    }

  def map[U](f: T => U): Matrix[U] = Matrix(data.map(_.map(f)))

  /** What follows are my implementations. */

  /** The element at row r and column c */
  def apply(r: Int, c: Int): T = data(r)(c)

  /** Gives Some[T](element) at row r and column c 
    * if r and c are within index bounds, else None
    */
  def get(r: Int, c: Int): Option[T] = 
    val opt: Option[T] = 
      if (r < data.size - 1 && c < data(r).size - 1){
        Some(data(r)(c)) else None
      }
    opt

  /** The row vector of row r */
  def row(r: Int): Vector[T] = data(r)

  /** The column vector of column c */
  def col(c: Int): Vector[T] = 
    for (i <- 0 until data.size - 1){
      data(i)(c)
    }

  /** A new Matrix with element at row r and col c updated */ 
  def updated(r: Int, c: Int, value: T): Matrix[T] = {
    val newData = {
      for (i <- 0 until data.size - 1){
        for (j <- 0 until data(i).size - 1){
          if (r == i && j == c){
            data(r)(c) = value
          }
        }
      }
    }
    Matrix[T](newData)
}

object Matrix {
  def fill[T](rowSize: Int, colSize: Int)(init: T): Matrix[T] = 
    new Matrix(Vector.fill(rowSize)(Vector.fill(colSize)(init)))
}

У меня несколько вопросов:

  1. Я не могу понять смысл первой функции foreachRowCol. Что означает функция с типом функции (Int, Int, T) => Unit?
  2. Я думаю, что сделал нормальную реализацию. Есть ли у меня причины думать, что это не так?
  3. Я думал об обновленном методе примерно так:
    а) перебрать матрицу
    b) замените значение в data (r) (c) на value
    c) вывести новую матрицу с элементом в строке r и столбце c, замененным на value.
    Верно ли мое мышление или мне следовало реализовать его по-другому?

Привет. На ваш 1-й кв. Ответят здесь. Остальные принадлежат codereview.stackexchange.com

joel 03.11.2018 13:34

Вы думаете, что «сделали нормальную реализацию» (№2), но не понимаете ее смысла (№1)? Да, есть определенно "причина, по которой вы считаете, что это не так". Вы пытались скомпилировать свой код? Попробуй это?

Dima 03.11.2018 14:44

Я сейчас работаю над отладкой.

R. Penber 03.11.2018 17:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
118
0

Другие вопросы по теме