我在建築下面的代碼的麻煩:斯卡拉編譯錯誤
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()不工作。
我在建築下面的代碼的麻煩:斯卡拉編譯錯誤
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()不工作。
Scala知道兩個名稱空間:類型和值。類型定義了值的能力,值是你調用方法的東西。
graph_t()
是一個方法調用(該apply
法),但是你沒有定義一個名爲graph_t
值,你定義了一個名爲graph_t
類型,你不能調用類型的方法。
原因scala.collection.mutable.Map[Long, (Long, Float)]()
的工作原理是因爲scala.collection.mutable.Map
既是一個類型也是一個值。
這很有趣。試試這個:
type s = String;
var x = s()
你會得到同樣的錯誤:找不到。
這是因爲類的名稱既是類型的名稱也是構造函數的名稱,但類型的名稱不一定是構造函數的名稱。
在這種情況下,函數Map實際上構造了Map抽象類的具體實現。