2012-12-16 164 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] _