Как данное ключевое слово работает в Scala 3 или dotty?

Я просматривал документацию по 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 или что-то еще?


person John    schedule 22.01.2020    source источник
comment
Слишком рано задавать эти вопросы ТБХ. Он еще не завершен.   -  person texasbruce    schedule 22.01.2020


Ответы (1)


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 на примере — лучше Semigroup и Monoid слайды Филипа Шварца содержат превосходные пошаговые и параллельные сравнения реализаций классов типов в Scala 2 и Scala 3, например:

введите здесь описание изображения

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


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

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

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

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

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

person Mario Galic    schedule 22.01.2020
comment
Эй, Марио, большое спасибо за ссылку на мою презентацию :-) - person Philip Schwarz; 24.01.2020