Trong trường hợp Danh sách, không có khai báo loại, Scala xem xét tất cả các phần tử và cố gắng tìm loại phổ biến. Trong trường hợp của bạn, vì Int có thể được chuyển đổi thành Double, nó chuyển đổi danh sách hỗn hợp của bạn thành một List [Double] quảng bá Int của bạn.
Trình xây dựng bản đồ có một loạt 2 bộ dữ liệu. Bạn sẽ nhận được hành vi tương tự, nếu bạn vừa xây dựng danh sách các bộ dữ liệu:
scala> List((1, "one"), (2.0, "two.oh"))
res0: List[(AnyVal, String)] = List((1,one), (2.0,two.oh))
Tuple2 [Int, String] không thể tự động được quảng bá lên Tuple2 [Double, String]. Trong trường hợp này, bạn sẽ cần phải giúp trình biên dịch ra một chút với một tuyên bố loại:
scala> val x: List[(Double, String)] = List((1, "one"), (2.0, "two.oh"))
x: List[(Double, String)] = List((1.0,one), (2.0,two.oh))
hoặc
scala> val x = List[(Double, String)]((1, "one"), (2.0, "two.oh"))
x: List[(Double, String)] = List((1.0,one), (2.0,two.oh))
hoặc trong trường hợp của bạn:
scala> val x = List[(Double, String)]((1, "one"), (2.0, "two.oh")).toMap
x: scala.collection.immutable.Map[Double,String] = Map(1.0 -> one, 2.0 -> two.oh)
Đối với một số lý do , bằng cách sử dụng khai báo kiểu trên Bản đồ không hoạt động. Bạn không chắc chắn lý do tại sao:
scala> val x = Map[Double, String](1 -> "one", 2.0 -> "two.oh")
<console>:7: error: type mismatch;
found : (Int, String)
required: (Double, String)
val x = Map[Double, String](1 -> "one", 2.0 -> "two.oh")
Sao chép trên 2.9.2. –