SORU
20 EYLÜL 2011, Salı


Tembel bir val ne yapar?

Scala lazy vals sağlamak olduğunu fark ettim. Ama ne yaptıklarını anlamıyorum.

scala> val x = 15
x: Int = 15

scala> lazy val y = 13
y: Int = <lazy>

scala> x
res0: Int = 15

scala> y
res1: Int = 13

REPL y lazy val ama nasıl bir normalden farklı val. olduğunu gösterir

CEVAP
20 EYLÜL 2011, Salı


Aralarındaki fark val lazy val oysa tanımlanır yürütülen bir ilk kez erişildiğinde yürütülür.

scala> val x = { println("x"); 15 }
x
x: Int = 15

scala> lazy val y = { println("y"); 13 }
y: Int = <lazy>

scala> x
res2: Int = 15

scala> y
y
res3: Int = 13

scala> y
res4: Int = 13

lazy val bir kez ve bir daha sonra yürütülen bir yöntem (def ile tanımlı) aksine. Bu işlemi tamamlanması uzun zaman alır ve daha sonra kullanılırsa emin olmadığında yararlı olabilir.

scala> class X { val x = { Thread.sleep(2000); 15 } }
defined class X

scala> class Y { lazy val y = { Thread.sleep(2000); 13 } }
defined class Y

scala> new X
res5: X = X@262505b7 // we have to wait two seconds to the result

scala> new Y
res6: Y = Y@1555bd22 // this appears immediately

Burada, değerleri 14 ** y hiç kullanılmamış, x sadece gereksiz yere kaynak israf. Eğer biz varsayalım y hiçbir yan etkisi ve bunu bile bilmiyoruz ne sıklıkla erişilen (asla, bir kez, binlerce kez) faydasız olarak bildirin def beri istemiyoruz çalıştırmak için birkaç kez.

Eğer lazy vals nasıl uygulandığını bilmek istiyorsanız, bu question bkz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LounaTutorials

    LounaTutoria

    10 EYLÜL 2009
  • New Challenger - Game Reviews

    New Challeng

    20 Temmuz 2006
  • xiaoyu85

    xiaoyu85

    20 ŞUBAT 2010