SORU
3 Kasım 2011, PERŞEMBE


Ne bir bütün kullanır Scala alt çizgi?

Anketler scala-lang.org alınan the list bir göz almış ve meraklı bir soru fark ettim: "Can you name all the uses of “_”?". Misin? Evet, lütfen bu işlemi buradan yapın :-) Açıklayıcı örnekler takdir edilmektedir.

CEVAP
3 Kasım 2011, PERŞEMBE


Aklıma olanlardır

Varoluşsal tipler

def foo(l: List[Option[_]]) = ...

Yüksek kinded tür parametreleri

case class A[K[_],T](a: K[T])

Göz ardı değişkenler

val _ = 5

Göz ardı parametreleri

List(1, 2, 3) foreach { _ => println("Hi") }

Kalıplarını

Some(5) match { case Some(_) => println("Yes") }

Joker alır

import java.util._

Gizleme alır

import java.util.{ArrayList => _, _}

Noktalama katılarak mektuplar

def bang_!(x: Int) = 5

Atama operatörleri

def foo_=(x: Int) { ... }

Tutucu sözdizimi

List(1, 2, 3) map (_   2)

Kısmen fonksiyonları uygulanır

List(1, 2, 3) foreach println _

Unuttuğum başkaları da olabilir!


Örnek foo(_) foo _ farklı neden gösteriliyor:

Bu örnek 37**:

trait PlaceholderExample {
  def process[A](f: A => Unit)

  val set: Set[_ => Unit]

  set.foreach(process _) // Error 
  set.foreach(process(_)) // No Error
}

İlk durumda, process _ bir yöntem; Scala temsil polimorfik yöntem alır ve monomorphic tür parametresi doldurarak yapmaya çalışır, ama yok olduğunu fark ederyazınbu tür (_ => Unit) => ? verecek A (Varoluşsal _ bir tür değildir) için doldurulabilir.

İkinci durumda, process(_) açık tartışma ile lambda yazın yazarken bir lambda;, Scala foreach beklediği değişkeni türünü otomatik olarak tanır ve _ => Unitbir türü (oysa sadece düz _ değil), bu yüzden yerine ve türetilmiş olabilir.

Bu şimdiye kadar karşılaştığım Scala içinde en zor yakaladım olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HuskyStarcraft

    HuskyStarcra

    4 HAZİRAN 2009
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006