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

saa*_*az1 6 scala tuples

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

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

def main(args: Array[String]): Unit = {
        val (I, O) = foo()
}
Run Code Online (Sandbox Code Playgroud)

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

  • 没找到:值我
  • 找不到:值O.

可能是什么原因造成的?

Fyn*_*ynn 8

问题是使用大写字母IO模式匹配.您应该尝试用小写字母替换它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
Run Code Online (Sandbox Code Playgroud)

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

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