Подтвердить что ты не робот

Почему нет частичного типа литерала?

Интересно, почему не существует литерала для частичных типов функций. Я должен написать

val pf: PartialFunction[Int, String] = {
  case 5 => "five"
}

где литерал, подобный :=>, будет короче:

val pf: Int :=> String = {
  case 5 => "five"
}

Частные функции часто используются, а в Scala уже есть какая-то "специальная" функция, поэтому почему нет специального синтаксиса для этого?

4b9b3361

Ответ 1

Возможно, отчасти потому, что вам не нужен литерал: вы всегда можете написать свой собственный :=> в качестве типа инфиксного оператора, если хотите более сжатый синтаксис:

scala> type :=>[A, B] = PartialFunction[A, B]
defined type alias $colon$eq$greater

scala> val pf: Int :=> String = { case 5 => "five" }
pf: :=>[Int,String] = <function1>

scala> pf.isDefinedAt(0)
res0: Boolean = false

scala> pf.isDefinedAt(5)
res1: Boolean = true

Я не один из разработчиков языка Scala, так что это более или менее предположение о "почему?". Вы можете получить более качественные ответы в списке scala-debate, что является более подходящим местом для вопросов, связанных с языковым дизайном.