Как работает данное ключевое слово в Scala 3 или dotty? - PullRequest
1 голос
/ 22 января 2020

Я просматривал Scala 3 документации. Они ввели ключевое слово given, которое рассматривается как альтернатива Scala 2 implicit. Код здесь

trait Ord[T] {
  def compare(x: T, y: T): Int
  def (x: T) < (y: T) = compare(x, y) < 0
  def (x: T) > (y: T) = compare(x, y) > 0
}

given intOrd: Ord[Int] {
  def compare(x: Int, y: Int) =
    if (x < y) -1 else if (x > y) +1 else 0
}

given listOrd[T]: (ord: Ord[T]) => Ord[List[T]] {

  def compare(xs: List[T], ys: List[T]): Int = (xs, ys) match {
    case (Nil, Nil) => 0
    case (Nil, _) => -1
    case (_, Nil) => +1
    case (x :: xs1, y :: ys1) =>
      val fst = ord.compare(x, y)
      if (fst != 0) fst else compare(xs1, ys1)
  }
}

Я очень смущен, что то, что здесь происходит в приведенном ниже коде:

given intOrd: Ord[Int] {
   def compare(x: Int, y: Int) =
   if (x < y) -1 else if (x > y) +1 else 0
}

Является ли это экземпляром Ord[T] в ключевом слове given или чем-то еще еще

1 Ответ

4 голосов
/ 22 января 2020

given в этом контексте делает Int членом класса типов Ord и соответствует Scala 2, предоставляющему экземпляр класса типов через implicit определение

implicit object intOrd extends Ord[Int] {
  def compare(x: Int, y: Int) =
    if (x < y) -1 else if (x > y) +1 else 0
}

, как объяснено в Отношения с Scala 2 Последствия .

Scala 3 по примеру - лучшие слайды полугруппы и моноида Филиппа Шварца имеют отличные пошаговые и параллельные сравнения Scala 2 против Scala 3 реализации классов типов, например,

enter image description here

Смежный вопрос: Как использовать данные в Dotty?


Что касается комментария, возможно, рано задавать этот вопрос, рассмотрите аналогичный вопрос: deusaquilus in Revisiting Implicits

Просто из любопытства мы на самом деле думаем об изменении последствий между Дотти 0,22 и Scala 3? Я пытаюсь оценить стабильность функций, и синтаксис является большой частью этого.

, на который Одерский отвечает

Насколько я обеспокоен, надеюсь, что мы достигли фиксированной точки. Я на самом деле очень доволен текущим предложением. Если у кого-то есть блестящая идея, как улучшить некоторые аспекты этого в течение следующих недель, я, конечно, буду рад рассмотреть. Но я ожидаю, что мы в основном уже закончили.

Таким образом, кажется, given будет частью Scala 3.

...