tôi đã viết các chương trình đơn giản sau đây:Hiểu loại inferrence trong Scala
import java.util.{Set => JavaSet}
import java.util.Collections._
object Main extends App {
def test(set: JavaSet[String]) =()
test(emptySet()) //fine
test(emptySet) //error
}
Và đã thực sự gây bất ngờ cho dòng cuối cùng test(emptySet)
không được biên dịch. Tại sao? Sự khác nhau giữa test(emptySet())
là gì? Tôi nghĩ ở Scala, chúng ta có thể bỏ qua dấu ngoặc đơn một cách tự do trong những trường hợp như vậy.
Nhưng tại sao loại được suy ra trong 'test (emptySet)' - 'JavaSet [Nothing]'? –
Từ thông báo lỗi, nó không phải là. Nếu bạn có nghĩa là IDEA hiển thị loại này, nó sai. Bạn không thể tin tưởng các lỗi được hiển thị của IDEA và các loại suy ra khi nhập, luôn cố gắng thực sự tạo mã trước tiên. –
Chỉ cần đọc báo cáo của bạn. Do đó, trường hợp thứ hai cũng nên hoạt động tốt, đúng không? –