Kilka uwag:
F:\prog\scala\scala-2.8.0.r18341-b20090718020201\bin>scala
Welcome to Scala version 2.8.0.r18341-b20090718020201 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_13).
Type in expressions to have them evaluated.
Type :help for more information.
scala> var z = List(List (1.0, 2.2), List(2, 1.1, -2.1))
z: List[List[AnyVal]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
scala> var z = List(List (1.0f, 2.2f), List(2f, 1.1f, -2.1f))
z: List[List[Float]] = List(List(1.0, 2.2), List(2.0, 1.1, -2.1))
znaczenie, jak na pytanie "Java: my method wants the double type instead of float?":
'F' na końcu numeru sprawia, że pływak zamiast podwójne.
Java nie będzie automatycznie zawężać podwójnej do wartości zmiennoprzecinkowej.
scala> var z = (1.0f :: 2.2f :: Nil) :: (2f :: 1.1f :: -2.1f :: Nil) :: Nil
z: List[List[Float]] = List(List(1.0, 2.2), List(2.0, 1.1, -2.1))
działa zbyt
Wystarczy dodanie wyraźnego typu nie byłoby tyle:
scala> var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
<console>:4: error: type mismatch;
found : Double(1.0)
required: Float
var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
^
<console>:4: error: type mismatch;
found : Double(2.2)
required: Float
var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
^
<console>:4: error: type mismatch;
found : Double(1.1)
required: Float
var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
^
<console>:4: error: type mismatch;
found : Double(-2.1)
required: Float
var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
^
To samo jest z jednej zmiennej:
scala> var f : Float = -2.1
<console>:4: error: type mismatch;
found : Double(-2.1)
required: Float
var f : Float = -2.1
^
scala> var f : Float = -2.1f
f: Float = -2.1
Uwaga: scala 2.7.5 final lub 2.8 działa tak samo tutaj. – VonC