2012-12-16 7 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") 

Почему? Я не могу использовать «тип», как это?

+3

Также обратите внимание, что вместо '(x => x match {case (a, b) => ...' вы можете просто написать '{case (a, b) => ... ' –

ответ

4

Поскольку MyParams это только псевдоним типа Map[Int, String]. Чтобы сделать эту работу, вы должны добавить фабрику, такую ​​как

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

Я думаю, что это возможность сделать компилятор/scala еще более умнее, если вы сделаете псевдоним некоторого класса, и этот класс имеет объект-компаньон с методом apply в нем, затем псевдоним может использовать это .. так как alias = синоним – ses

4

Map(1 -> "one", 2 -> "two")meansMap.apply(1 -> "one", 2 -> "two"). Map - одноэлементный объект.

Попробуйте это:

val MyParams = Map.apply[Int, String] _ 
Смежные вопросы