使用 scala-2.10.0-M7,考虑以下 Scala 程序:
import reflect.runtime.universe._
object ScalaApplication {
def main(args: Array[String]) {
val list = List(42)
printValueAndType(list)
printValueAndType(list(0))
}
def printValueAndType (thing: Any) {
println("Value: " + thing)
println(reflect.runtime.currentMirror.reflect(thing).symbol.toType match {case x:TypeRef => "Type: " + x.args});
}
}
它提供以下输出:
$ scala ScalaApplication.scala
Value: List(42)
Type: List()
Value: 42
Type: List()
为什么 的 类型 与list
的 类型 相同list(0)
?
我本来期望类似于以下 Java 程序的行为的东西:
public class JavaApplication {
public static void main(String[] args) {
Integer[] list = new Integer[]{42};
printValueAndType(list);
printValueAndType(list[0]);
}
public static void printValueAndType(Object o) {
System.out.println("Value: " + o.toString());
System.out.println("Type: " + o.getClass().getSimpleName());
}
}
这给出了结果:
$ java JavaApplication
Value: [Ljava.lang.Integer;@16675039
Type: Integer[]
Value: 42
Type: Integer
总结:为什么列表和列表元素的类型都报告为List()
?