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

  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010
  • ShayLoss

    ShayLoss

    5 Kasım 2009
  • Viktorija A.

    Viktorija A.

    28 Mart 2009