Scala编译错误

时间:2015-06-29 00:10:03

标签: scala

我在构建以下代码时遇到了麻烦:

type graph_t = scala.collection.mutable.Map[Long, (Long, Float)];
var graph : graph_t = graph_t();

但是,它可以通过将graph_t()替换为原始类型来实现:

var graph : graph_t = scala.collection.mutable.Map[Long, (Long, Float)] ();

任何答案都将不胜感激。

2 个答案:

答案 0 :(得分:3)

Scala知道两个名称空间:类型和值。类型定义了能够使用的值,值是您调用方法的值。

graph_t()是方法调用(apply方法),但是您没有定义名为graph_t的值,您定义了一个名为graph_t的类型,而您不能调用类型的方法。

scala.collection.mutable.Map[Long, (Long, Float)] ()的作用原因是因为scala.collection.mutable.Map既是类型又是值。

答案 1 :(得分:0)

这很有意思。试试这个:

type s = String;
var x = s()

你得到同样的错误:找不到。

这是因为类的名称既是类型的名称,也是构造函数的名称,但类型的名称不一定是构造函数的名称。

在这种情况下,函数Map实际上构造了Map抽象类的具体实现。