Trong Scala, chính xác 'val a: A = _' (gạch dưới) có nghĩa là gì?


Câu trả lời:


143

val a: A = _là một lỗi biên dịch. Ví dụ:

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

What does work is var a: A = _(ghi chú varthay vì val). Như Chuck đã nói trong câu trả lời của mình, điều này khởi tạo biến thành giá trị mặc định. Từ Đặc tả ngôn ngữ Scala:

0 nếu T là Int hoặc một trong các kiểu dải con của nó,
0L nếu T là Dài,
0,0f nếu T là Float,
0,0d nếu T là Double,
false nếu T là Boolean,
() nếu T là Đơn vị,
null cho tất cả các kiểu khác T.


6
Ha, rất hay khi chuyển đổi val / var. Bộ não của tôi vừa lướt qua nó.
Chuck

2
Bất kỳ thông tin chi tiết nào về lý do tại sao điều này không được thực hiện để làm việc val?
Erik Kaplun

4
@ErikAllik: Đây chỉ là suy đoán thuần túy, nhưng val a: Int = _có lẽ là lỗi biên dịch vì nếu nó hoạt động thì sẽ rất tệ. Nó sẽ chỉ là một cách viết khó hiểu val a: Int = 0. Đặt a varthành giá trị mặc định có ý nghĩa vì a vardự kiến ​​sẽ thay đổi, nhưng a vallà cố định, vì vậy phương pháp hay nhất là gán giá trị một cách rõ ràng.
Shuklaswag,

1
@Shuklaswag: Chỉ khi bạn biết nó là số nguyên. Tôi đang cố gắng sử dụng cái này để khởi tạo một loại val mà tôi chưa biết.
Adrian có thể

33

Nó khởi tạo athành giá trị mặc định của kiểu A. Ví dụ: giá trị mặc định của Int là 0 và giá trị mặc định của kiểu tham chiếu là null.


10
Giá trị mặc định của một lớp trộn lẫn trong NotNullđặc điểm là gì? :-)
Jean-Philippe Pellet

9
@ Jean-PhilippePellet: Kể từ Scala 2.9.0.1 (là phiên bản gần đây nhất mà tôi đã sử dụng), giá trị mặc định của một lớp kết hợp trong đặc điểm NotNull là - tạm dừng kịch tính - null . Tôi hy vọng điều này có thể sẽ thay đổi vào một lúc nào đó, nhưng hiện tại nó có vẻ là con _át chủ bài NotNull.
Chuck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.