SORU
28 Kasım 2011, PAZARTESİ


Scala bir yöntem tanımlamak için Dokuz yollar?

Scala şeyler tanımlamak için çeşitli yollar, {} blok muameleyi anlayış benim eksikliği ile komplike ile bulmaca için çalışıyorum bu yüzden:

object NewMain extends Thing{

    def f1 = 10
    def f2 {10}
    def f3 = {10}
    def f4() = 10
    def f5() {10}
    def f6() = {10}
    def f7 = () => 10
    def f8 = () => {10}
    def f9 = {() => {10}}

    def main(args: Array[String]){
        println(f1)     // 10
        println(f2)     // ()
        println(f3)     // 10
        println(f4)     // 10
        println(f4())   // 10
        println(f5)     // ()
        println(f5())   // ()
        println(f6)     // 10
        println(f6())   // 10
        println(f7)     // <function0>
        println(f7())   // 10
        println(f8)     // <function0>
        println(f8())   // 10
        println(f9)     // <function0>
        println(f9())   // 10
    }

}

Muhtemelen bunlardan bazıları eşittir, bazıları diğerleri için sözdizimsel şeker ve işime gereken şeyler var, ama bana yaşam için bunu bir türlü çözemiyorum. Benim belirli bir soru vardır:

  • Nasıl println(f2) println(f5()) unit verir? Son madde blok 10 değil mi? Nasıl 10 veren println(f3()), benden ne farkı var?

  • println(f5) unit, println(f5()) geçersiz olması gerekmiyor verirse, unit bir işlevi olmadığı için mi? Aynı println(f6) println(f6()) için geçerlidir

  • 10 yazdırma olanlar: f1, f3, f4, f4(), f6, f6(), f7(), f8(), f9(), aralarında herhangi bir işlevsel fark ne açısından) ya da kullanım farklılıkları (hangisini kullanmalıyım zaman açısından) var mı? Veya eşdeğer?

CEVAP
28 Kasım 2011, PAZARTESİ


Sırayla sorularınıza cevap vereyim

  • f2 f5() dönüş Unit çünkü scala alır herhangi bir def olmadan bir "=" bir işlev döndüren Unit ne olursa olsun, ne son madde bir bloktur. Aksi takdirde bu oldukça ayrıntılı bir şey döndüren bir işlev tanımlamak için olmaz, çünkü iyi bir şeydir.
  • println(f5()) scala Unit kuşkusuz olmasa da geçerli bir nesne değildir, çünkü Unit bir örneğini oluşturabilir döndürür olsa bile geçerlidir. Unit.toString() geçerli, yoksa genel olarak yararlı bir açıklama, örneğin.
  • 10 baskı tüm sürümleri aynı. En önemlisi, f7,f8 f9 aslında 10 döndürme yerine 10 doğrudan döndüren fonksiyonlar döndüren fonksiyonlardır. def f8 = () => {10}, bildirdiğinizde herhangi bir argüman ve döndüren 41* *bir işlevi, bağımsız değişken ve döner tek bir tamsayı alır bir işlevi beyan ediyorsunuz. println(f8) ardından çağırmak f8 dilligently seni işlevi döndürür. println(f8()) çağırdığınızda işlevi döndürür, hemen çağırır.
  • Fonksiyonları f1,f3,f4, f6 ne açısından eşdeğerdir, stil açısından tek farklılık gösteriyorlar.

"Bilinmeyen kullanıcı", parantez sadece kapsam açısından önem ve kullanma durumu burada herhangi bir fark yaratmıyor. gösterir gibi

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • Ryan Ha

    Ryan Ha

    9 NİSAN 2006
  • WhtButterflyLiz

    WhtButterfly

    14 NİSAN 2008