2012-12-16 200 views
1

試着去了解我怎麼能在Scala中使用類型:斯卡拉類型編譯錯誤

object TypeSample extends App { 

    type MyParams = Map[Int, String] 

    def showParams(params: MyParams) = { 
    params.foreach(x => x match { case (a, b) => println(a + " " + b) }) 
    } 

    //val params = MyParams(1 -> "one", 2 -> "two") 
    val params = Map(1 -> "one", 2 -> "two") 

    showParams(params) 

} 

此行拋出異常編譯: 「無法解析符號 'MyParams'」

//val params = MyParams(1 -> "one", 2 -> "two") 

爲什麼?我不能像這樣使用'type'?

+3

還要注意的是,而不是'(X => X匹配{情況下(A,B)=> ...'你可以只寫'{情況(a,b)=> ...' –

回答

4

因爲MyParams只是一個別名類型Map[Int, String]。爲了使這項工作,你必須添加一個工廠一樣

object MyParams { 
    def apply(params: (Int, String)*) = Map(params: _*) 
} 
+0

我猜想,如果編譯器/ scala更加智能化,那麼如果某個類爲別名創建了別名,並且此類中的companion對象具有apply方法,那麼別名可以使用此..因爲別名=同義詞 – ses

4

Map(1 -> "one", 2 -> "two")meansMap.apply(1 -> "one", 2 -> "two")Map是一個單例對象。

試試這個:

val MyParams = Map.apply[Int, String] _