Как отправить универсальный c объект вместо переменной типа (или любой) в Scala - PullRequest
1 голос
/ 24 января 2020

Я решаю задачу 20 на этой странице - http://aperiodic.net/phil/scala/s-99/

Это код, который я написал

import scala.annotation.tailrec
import scala.collection.immutable.Nil
import scala.collection.immutable.ListSet

object Problem20 extends App {
  def removeAt[A](order: Int, xs: List[A]): (List[A], A) = {
    def removeAtRec(xs: List[A], acc: (List[A], A), i: Int): (List[A], A) =
      (xs, i) match {
        case (Nil, _)                    => (acc._1.reverse, acc._2)
        case (x :: xs_, i) if i == order => removeAtRec(xs_, (acc._1, x), i + 1)
        case (x :: xs_, i)               => removeAtRec(xs_, (x :: acc._1, acc._2), i + 1)
      }
    removeAtRec((xs, (Nil, ### What should I put here ###), 0) 
  }

  println(removeAt(3, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k)))
  println(removeAt(0, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k)))
  println(removeAt(10, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k)))
  println(removeAt(11, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k)))
  println(removeAt(12, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k)))
}

Я хочу отправить объект в качестве заполнителя ### What should I put here ###. В Python, Java я могу отправить ноль. Но в scala оно ломается. Я хочу отправить какой-то объект, который, я знаю, будет переопределен наверняка.

1 Ответ

0 голосов
/ 24 января 2020

Идиоматически мы используем Option вместо null, например

def removeAt[A](order: Int, xs: List[A]): (List[A], Option[A]) = {
  @tailrec def removeAtRec(xs: List[A], acc: (List[A], Option[A]), i: Int): (List[A], Option[A]) =
    (xs, i) match {
      case (Nil, _)                    => (acc._1.reverse, acc._2)
      case (x :: xs_, i) if i == order => removeAtRec(xs_, (acc._1, Some(x)), i + 1)
      case (x :: xs_, i)               => removeAtRec(xs_, (x :: acc._1, acc._2), i + 1)
    }
  removeAtRec(xs, (Nil, None), 0)
}

removeAt(42, List('a', 'b')) // res5: (List[Char], Option[Char]) = (List(a, b),None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...