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
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.
Tembel bir val ne yapar?...
Nasıl Virgül Operatörü iş yapar...
Yapar .NET CLR Gerçekten Geçerli İşlem...
Ünlem işareti işlevi önce ne yapar?...
Neden NULL = NULL SQL server yanlış de...