Scala

6

'daki 'kaldırma' işlevleri ile karışıklık Functional Programming In Scala kitabında, A => B türünde bir işlevin Option[A] => Option[B]'a yükseltildiği bir yerde 'Lift' örneği vardır.Scala

Bu asansör nasıl uygulanacağını geçerli:

def lift[A,B](f: A => B):Option[A] => Option[B] = _ map f 

bu ilgili karışıklıkları birkaç vardır:

ilki, '_' Burada ne? Ve ikincisi, ben aşağıdaki özel durum alıyorum onun büyü yapmak için tip-çıkarsama bekliyor def 'dönüş türü kaldırdığınızda:

scala> def lift[A,B](f: A => B) = _ map f 
<console>:7: error: missing parameter type for expanded function ((x$1) => x$1.map(f)) 
     def lift[A,B](f: A => B) = _ map f 

Burada birinin neler açıklayabilir misiniz?

Teşekkür

cevap

10
  1. lift bir işlevi döndüren bir fonksiyondur. fonksiyonu bu değere fonksiyonu f uygulanarak asansör bir değer (isimsiz) verdi. Kaldırılacak isimsiz değer _ olarak adlandırılır.

    def lift[A,B](f: A => B): Option[A] => Option[B] = { value => value map f } 
    
  2. bu işlevin (bir iade edilen) dönüş tipi ister açık bir şekilde belirtilmediği veya dolaylı tespit edilmesi gerekmektedir: Kesinlikle bunu bir daha açık bir ad verebilir. yazılı olarak derleme bu ne döndürülecek olan sonucuna ulaşabilirse bir Option[B] (yani fonksiyon dolaylı türünü Option[B] (belirlendiği dönmek sahipken daha spesifik lift açıkça belirtildiği bir işlevi Option[A] => Option[B]() döndürüyor)). Bu tür bilgi olmadan, derleyici dönüş türünün ne olduğuna dair başka bir göstergeye ihtiyaç duyar.

    Alternatif olarak, böylece lift tanımlayın:

    İşte
    def lift[A,B](f: A => B) = { value: Option[A] => value map f } 
    

    açıkça value için türünü belirten ediyoruz ve derleyici fonksiyonun dönüş tipi Option[B] olmak döndü

    • çıkarabiliriz, f: A => B çünküiçin, B için
    • döndürme türü türü A eşler, Option[A] => Option[B] olmak üzere.