【问题标题】:Scala type compilation errorScala 类型编译错误
【发布时间】:2012-12-16 20:19:59
【问题描述】:

尝试了解如何在 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)

}

这一行抛出编译异常:“Can not resolve symbol 'MyParams'”

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

为什么?我不能像这样使用'type'?

【问题讨论】:

  • 另请注意,您可以只写{ case (a, b) => ...而不是(x => x match { case (a, b) => ...

标签: scala syntax type-alias


【解决方案1】:

因为MyParams 只是Map[Int, String] 类型的别名。要完成这项工作,您必须添加一个工厂,例如

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

【讨论】:

  • 我猜,如果一个类为某个类创建别名,并且这个类有伴生对象,其中包含应用方法,那么别名可以使用它.. 因为别名 = 同义词
【解决方案2】:

Map( 1 -> "one", 2 -> "two")meansMap.apply( 1 -> "one", 2 -> "two")Map 是一个单例对象。

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2011-11-12
    相关资源
    最近更新 更多