[解決済み】レイジーバルって何するもの?
2022-04-20 07:56:44
質問
私は、Scalaが提供する
lazy vals
. しかし、私は彼らが何をするのか理解できません。
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
とは異なりますが、通常の
val
?
解決方法は?
両者の違いは
val
は定義された時点で実行されるのに対し
lazy val
は、初めてアクセスしたときに実行されます。
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
メソッドとは対照的に、(
def
) a
lazy val
は一度だけ実行され、その後は二度と実行されない。これは、ある操作が完了するまでに時間がかかる場合や、その操作が後で使われるかどうかわからない場合に有効である。
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
ここで、値
x
と
y
は決して使用されず、ただ
x
不必要に資源を浪費することになる。もし仮に
y
は副作用がなく、どれくらいの頻度でアクセスされるのか(全くないのか、一度もないのか、何千回もあるのか)わからないので、それを
def
何度も実行することはないでしょうから。
もし、どのように
lazy vals
は実装されています。
質問
.
関連
-
[解決済み] 実行時に変数の型を取得したい
-
[解決済み] ScalaのDSLって何?[クローズド]
-
[解決済み] node.jsでファイルを1行ずつ読み込む?
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scalaの型消去を回避するにはどうしたらいいですか?または、なぜ私のコレクションの型パラメータを取得することができないのですか?
-
[解決済み】Scalaで変数をキャストする方法は?
-
[解決済み】Scalaのyieldとは何ですか?
-
[解決済み] Scalaの識別子 "implicitly "とは?
-
[解決済み】Scalaのimplicitを理解する。
-
[解決済み】Scalaはどこでimplicitを探すのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Spark Exponential Moving Averageについて
-
[解決済み】Spark - アプリの投稿時に「設定にマスターURLが設定されている必要があります」というエラーが発生する
-
[解決済み] Scalaでループから抜け出すにはどうしたらいいですか?
-
[解決済み] 実行時に変数の型を取得したい
-
[解決済み] Scalaでファイル全体を読む?
-
[解決済み】Akka Kill vs. Stop vs. Poison Pill?
-
[解決済み】ScalaのfoldLeftとreduceLeftの違いについて
-
[解決済み】Scalaで変数をキャストする方法は?
-
[解決済み】レイジーバルって何するもの?
-
[解決済み] Scalaのlazy valの(隠れた)代償は何なのか?