Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala测试意外错误(';)';应为,但';}';建立_Scala_Sbt - Fatal编程技术网

Scala测试意外错误(';)';应为,但';}';建立

Scala测试意外错误(';)';应为,但';}';建立,scala,sbt,Scala,Sbt,这是我从列表中查找最大值的代码 object kp { def main(args: Array[String]) { def max(xs: List[Int]): Int = xs match { case Nil => throw new java.util.NoSuchElementException() case List(x: Int) => x case x :: y :: rest => max( (if (x > y) x else

这是我从列表中查找最大值的代码

object kp {
    def main(args: Array[String]) {

def max(xs: List[Int]): Int = xs match {
  case Nil => throw new java.util.NoSuchElementException()
  case List(x: Int) => x
  case x :: y :: rest => max( (if (x > y) x else y) :: rest )
} 

val a = 1 :: 4 :: 5 :: -4:: Nil
println(max(a))

}
}
当我想用sbt测试示例文件夹中的代码时

[info] Compiling 1 Scala source to /home/milenko/example/target/scala-2.11/classes...
[error] /home/milenko/example/src/main/scala/example/ListsSuite.scala:138: ')' expected but '}' found.
[error]   }
[error]   ^
[error] /home/milenko/example/src/main/scala/example/ListsSuite.scala:148: ')' expected but '}' found.
[error]   }
[error]   ^
[error] two errors found
错误是指

  test("maximum with one negative number") {
    assert(max(List(1,4,5,-4)) === 5 )
  }

我不知道为什么会这样。这是整个文件

现在我已经从文件中删除了一些测试,它只有135行。但是我得到了相同的结果

wc -l ListsSuite.scala 
135 ListsSuite.scala
milenko@milenko-desktop:~/example/src/test/scala/example$ cd ~/example
milenko@milenko-desktop:~/example$ sbt
[info] Loading global plugins from /home/milenko/.sbt/0.13/plugins
[info] Loading project definition from /home/milenko/example/project
[info] Set current project to progfun1-example (in build file:/home/milenko/example/)
> test
[info] Compiling 1 Scala source to /home/milenko/example/target/scala-2.11/classes...
[error] /home/milenko/example/src/main/scala/example/ListsSuite.scala:138: ')' expected but '}' found.
[error]   }
[error]   ^
[error] /home/milenko/example/src/main/scala/example/ListsSuite.scala:148: ')' expected but '}' found.
[error]   }
[error]   ^
[error] two errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 1 s, completed 16/03/2017 13:43:43

非常奇怪:138和:148表示什么?

我在filedropper链接中看不到任何内容(可能已过期?),但我知道导致类似编译器错误的一个错误是尾随逗号。我不认为这是您的问题,但了解编译器正在做什么对您的情况可能会有所帮助

这里是一个简单的文件
逗号.scala

val map = Map(
  1 -> "one",
  2 -> "two", // <--- comma after last argument
)
第二个错误与您的错误类似

我的猜测是:

  • “简单表达式的非法开始”
    是因为它期望在最后一个逗号之后有一个表达式(例如
    3->“三”
    ),但它遇到了右括号,它认为该括号不是有效的表达式
  • 因为在分析
    映射(…)
    的参数时,结束括号被较早地使用,所以当编译器完成对参数的处理时,它会上升一级以查找
    映射(
    )的结束括号',但会点击其他内容(在我的例子中是文件的结尾,在你的例子中是一个
    '}'
    ,来自一个封闭的代码块。这会产生错误
    )“预期的,但…找到的
第二个错误与您的错误相匹配,因此它可能指向某个错误,即它正在解析您的参数并吃掉您的结束括号。消息本身是一条红鲱鱼,因为它指向结束括号,而真正的问题可能更早出现

如果您是一名python开发人员,并且习惯于使用尾随括号,那么这可能会让您头疼不已


我有一个例子,scala 2.12编译器实际上可以处理尾随的逗号,但不幸的是,我无法用一个适合的小例子来重现它。不幸的是,这种细微的差异会在2.12和以前的版本之间创建不向后兼容的代码。

看起来像ListsSite.scala中的语法错误,可能是在报告的位置。你能添加完整的文件吗?请提供更多详细信息。如果你愿意,我有一个小例子来说明如何检查你的函数
max
。还有一个小建议,你不需要引发异常,你的函数不是纯函数,因为有副作用。它为我编译并运行sbt@FatTail你能试一下吗大文件listsuite.scala?@MotaF scalafiddle会更好
val map = Map(
  1 -> "one",
  2 -> "two", // <--- comma after last argument
)
$ scala Comma.scala
Comma.scala:4: error: illegal start of simple expression
)
^
Comma.scala:4: error: ')' expected but eof found.
)
 ^
two errors found