Di Scala, apa sebenarnya arti 'val a: A = _' (garis bawah)?


Jawaban:


143

val a: A = _adalah kesalahan kompilasi. Sebagai contoh:

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

Apa yang berhasil adalah var a: A = _(perhatikan varbukan val). Seperti yang dikatakan Chuck dalam jawabannya, ini menginisialisasi variabel ke nilai default. Dari Spesifikasi Bahasa Scala:

0 jika T adalah Int atau salah satu tipe subrange,
0L jika T Long,
0.0f jika T Float,
0.0d jika T Double,
false jika T adalah Boolean,
() jika T adalah Unit,
null untuk semua tipe lainnya T.


6
Ha, tangkapan yang bagus di sakelar val / var. Otak saya baru saja melewati itu.
Chuck

2
Adakah wawasan tentang mengapa ini belum dibuat untuk dikerjakan val?
Erik Kaplun

4
@ErikAllik: Ini murni spekulasi, tetapi val a: Int = _mungkin kesalahan kompilasi karena akan menjadi praktik yang buruk jika berhasil. Itu hanya akan menjadi cara penulisan yang kabur val a: Int = 0. Menyetel varke nilai default masuk akal karena a vardiharapkan berubah, tetapi a valtetap sehingga praktik terbaiknya adalah menetapkan nilai secara eksplisit.
Shuklaswag

1
@Shuklaswag: Hanya jika Anda mengetahui integernya. Saya mencoba menggunakan ini untuk menginisialisasi val dari tipe yang saya belum tahu.
Adrian Mei

33

Ini menginisialisasi ake nilai default dari tipe A. Misalnya, nilai default Int adalah 0 dan nilai default tipe referensi adalah null.


10
Apa nilai default dari kelas yang bercampur dalam NotNullsifat tersebut? :-)
Jean-Philippe Pellet

9
@ Jean-PhilippePellet: Mulai Scala 2.9.0.1 (yang merupakan versi terbaru yang saya gunakan), nilai default dari kelas yang bercampur dalam sifat NotNull adalah - jeda dramatis - null . Saya berharap ini mungkin akan berubah di beberapa titik, tetapi saat ini tampaknya _mengalahkan NotNull.
Chuck
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.