2015-06-29 180 views
1

我在建築下面的代碼的麻煩:斯卡拉編譯錯誤

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

任何答案可以理解的:

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

然而,通過與原型替換graph_t()不工作。

回答

3

Scala知道兩個名稱空間:類型和值。類型定義了值的能力,值是你調用方法的東西。

graph_t()是一個方法調用(該apply法),但是你沒有定義一個名爲graph_t值,你定義了一個名爲graph_t類型,你不能調用類型的方法。

原因scala.collection.mutable.Map[Long, (Long, Float)]()的工作原理是因爲scala.collection.mutable.Map既是一個類型也是一個值。

0

這很有趣。試試這個:

type s = String; 
var x = s() 

你會得到同樣的錯誤:找不到。

這是因爲類的名稱既是類型的名稱也是構造函數的名稱,但類型的名稱不一定是構造函數的名稱。

在這種情況下,函數Map實際上構造了Map抽象類的具體實現。