未找到Scala:解包返回元组时的值x

时间:2013-05-18 15:43:59

标签: scala tuples

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

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

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

在标记的行上失败,报告:

  • 未找到:值我
  • 未找到:值O

这可能是什么原因?

2 个答案:

答案 0 :(得分:8)

问题是在模式匹配中使用大写字母IO。您应该尝试用小写字母val (i, o) = foo()替换它。 Scala Language Specification表示值定义可以扩展为模式匹配。例如,定义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是一个简单的标识符,以较低的标识开头   案件信。

答案 1 :(得分:3)

根据Scala naming convention

  

方法,值和变量名称应该在camelCase中使用第一个   小写字母:

您的I, O是模式变量。但是,在定义它们时必须小心。按照惯例,Scala期望模式变量以小写字母开头 期望常量以大写字母开头。所以,代码不会编译。