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

  • Absolute Zero(Programming Tutorials)

    Absolute Zer

    22 Kasım 2012
  • Rootjunky.com

    Rootjunky.co

    22 EKİM 2011
  • TeachMeComputer

    TeachMeCompu

    31 EKİM 2009