Scalaでは、「val a:A = _」(アンダースコア)は正確にはどういう意味ですか?


回答:


143

val a: A = _コンパイルエラーです。例えば:

scala> val a: String = _
<console>:1: error: unbound placeholder parameter
       val a: String = _
                       ^

機能するのはvar a: A = _(のvar代わりに注意val)です。チャックが彼の答えで言うように、これは変数をデフォルト値に初期化します。Scala言語仕様から:

TがIntまたはそのサブ範囲タイプの1つである場合は0、Tが
Longである場合は0L、Tが
Floatである
場合は0.0f、TがDoubleで
ある場合は0.0d 、Tがブール値である場合はfalse、
()TがUnitである場合は、
他のすべてのタイプではnull T.


6
ハ、ヴァル/ヴァルスイッチでいいキャッチ。私の脳はちょうどそれを通り過ぎました。
チャック

2
なぜこれが動作しないのかについての洞察はありvalますか?
エリックカプルン2014年

4
@ErikAllik:これは純粋な推測ですが、val a: Int = _うまくいったら悪い習慣になるため、おそらくコンパイルエラーです。それは単に難読化された書き方val a: Int = 0です。vara varは変更されることが予想されるため、aをデフォルト値に設定することには意味がありますが、a valは固定されているため、値を明示的に割り当てることをお勧めします。
Shuklaswag

1
@Shuklaswag:整数を知っている場合のみ。これを使用して、まだ知らないタイプのvalを初期化しようとしています。
エイドリアン5

33

aタイプのデフォルト値に初期化されますA。たとえば、Intのデフォルト値は0で、参照型のデフォルト値はnullです。


10
NotNull特性に混在するクラスのデフォルト値は何ですか?:-)
Jean-Philippe Pellet

9
@ Jean-PhilippePellet:Scala 2.9.0.1(これは私が使用した最新のバージョンです)では、NotNullトレイトに混在するクラスのデフォルト値は—劇的な一時停止— nullです。これはおそらくいつか変わると思いますが、現在は_切り札のようNotNullです。
チャック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.