2012-03-15 13 views
12

Zastanawiam się, dlaczego nie istnieje literał dla częściowych typów funkcji. Muszę napisaćDlaczego żaden typ funkcji częściowej nie jest dosłowny?

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

gdzie dosłowne jak :=> byłby krótszy:

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

cząstkowe funkcje są często wykorzystywane w Scala już jakiś „szczególny” cecha, więc dlaczego żadna specjalna składnia dla niego?

Odpowiedz

20

Zapewne po części dlatego, że nie trzeba dosłownym: zawsze można napisać własny :=> jako operatora typ Infix jeśli chcesz bardziej zwięzłej składni:

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 

Nie jestem jednym z projektantów języka Scala, więc jest to mniej więcej domysły na temat "dlaczego?". Możesz uzyskać lepsze odpowiedzi pod adresem the scala-debate list, które jest bardziej odpowiednim miejscem na pytania dotyczące projektowania języka.

+0

+1 Chciałem tylko zasugerować sztuczkę typu alias, ale nie wiedziałem, że można pójść o krok dalej i użyć formularza infiks. –

+0

@ Vlad, przyznam, że przeszedłem fazę nadużywania operatorów infiksów, gdy pierwszy raz się o nich dowiedziałem i nadal uważam, że jest to całkiem sprytny język. –

+2

Pytałem już o to samo wcześniej i powód, dla którego nie został dodany do języka (istniał krótko jako '~>') ma związek z tym, w jaki sposób są wyliczane parametry typu l-2-r –

Powiązane problemy