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

  • Greater Than Gatsby Photoshop Actions & Lightroom Presets

    Greater Than

    11 ŞUBAT 2013
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007
  • Tech4Geeks

    Tech4Geeks

    8 Ocak 2012