2012-03-15 28 views
12

Kısmi işlev türleri için neden bir neden bulunmadığını merak ediyorum. BenNeden kısmi işlev türü değişmez?

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

nerede literal :=> gibi bir kısa olacağını yazmak zorunda:

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

Kısmi fonksiyonlar sıklıkla kullanılan ve bazı "özel" özelliği zaten Scala'da, bu nedenle bunun için neden özel bir sözdizimi?

cevap

20

Muhtemelen kısmen Eğer bir hazır gerekmediğinden:

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 

Ben tasarımcılarından biri değilim: daha kısa sözdizimi isterseniz her zaman bir tür infix operatörü olarak kendi :=> yazabilir Ancak, Scala dilinin, bu yüzden "neden?" hakkında az ya da çok bir tahmin. Dil tasarım soruları için daha uygun bir mekan olan the scala-debate list adresinden daha iyi cevaplar alabilirsiniz.

+0

+1 Sadece takma ad türünü önerecektim ama bir adım daha atıp infix formunu kullanmanın mümkün olduğunu bilmiyordum. –

+0

@ Vlad, İlk kez öğrendiğimde (kısa) bir infix operatörü kötüye kullanım aşamasından geçtiğimi itiraf edeceğim ve yine de oldukça zarif bir dil özelliği olduğunu düşünüyorum. –

+2

Daha önce aynı soruyu sordum ve bu dile eklenmemiş olmasının sebebi (kısaca '~>' olarak var), tip parametrelerinin çıkarılmasıyla ilgili bir şeydir. L-2-r –

İlgili konular