7

我在无数网站上看到过这种代码,但它似乎无法编译:

def foo(): (Int, Int) = {
        (1, 2)
}

def main(args: Array[String]): Unit = {
        val (I, O) = foo()
}

它在标记线上失败,报告:

  • 未找到:值 I
  • 未找到:值 O

这可能是什么原因?

4

2 回答 2

9

问题是在您的模式匹配中I使用大写字母。O您应该尝试用小写字母替换它val (i, o) = foo()Scala 语言规范声明值定义可以扩展为模式匹配。例如,定义val x :: xs = mylist扩展为以下内容(参见第 39 页):

val x$ = mylist match { case x :: xs => {x, xs} }
val x = x$._1
val xs = x$._2

在您的情况下,值定义val (i, o) = foo()以类似的方式扩展。但是,语言规范还指出,模式匹配包含小写字母(参见第 114 页):

变量模式 x 是一个以小写字母开头的简单标识符。

于 2013-05-18T16:18:44.563 回答
3

根据 Scala命名约定

方法、值和变量名称应为驼峰式,首字母小写:

I, O是模式变量。但是,在定义它们时必须小心。按照惯例,Scala 期望模式变量以小写字母开头,并且期望常量以大写字母开头。因此,代码将无法编译。

于 2013-05-18T16:19:06.220 回答