- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因为我一直在学习 Scala,所以我经常想起 g++
从 scalac
读取神秘输出时出现编译器错误.然而,今天我遇到了一些我怀疑即使在 g++
中也不会发生的事情。宇宙。
一位 friend 给我发了一个非常简单的代码片段,其中有一个相当常见的错误:
case class Var(name: String) extends ArithExpr {
override def eval(env: Env) = env.lookup(name) match {
case Some(d) => d
case None => throw new IllegalArgumentException("Env " + env + " does not contain a binding for " + name)
}
override def exprString = name
// } // <-- MISSING THIS BRACE
case class Var
类声明缺少右大括号,您会认为编译器会告诉您该声明的左大括号(第 11 行)缺少右大括号。然而,
scalac
报告说它“假设”在前一个
case class
中间缺少一个右大括号声明(在第 7 行)。 (完整的错误输出包含在发布代码的底部。)
scalac
如果您了解语言的内部结构,错误消息是有意义的,但我在这里完全不知所措。后面的类声明中缺少的右大括号如何最终传播到文件前面已经成功解析的类定义?
error: you seem to be missing a '}' somewhere
的内容可能会更有帮助。反而。
scalac
输出,所以请记住,我知道这些都是有效的点,但我真的只是想了解这里的编译器发生了什么。
1{ 4}
6{ 9}
11{ 12{ 15}
19{ 22}
24{ 26}
28{ 33}
scalac
猜测缺少的大括号可能出现在以下任何一个位置(每个位置都由
x
表示):
1{ 4}
6{ 9}
11{ x 12{ x 15} x <-- HERE OR HERE OR HERE
19{ x 22} x <-- OR HERE OR HERE
24{ x 26} x <-- OR HERE OR HERE
28{ x 33} x <-- OR HERE OR HERE
scalac
的输出说:
+----- I THINK YOU ARE MISSING A
| CLOSING BRACE RIGHT HERE!
1{ V 4}
6{ x 9}
11{ 12{ 15}
19{ 22}
24{ 26}
28{ 33}
最佳答案
考虑以下示例(我故意删除了缩进):
case class Foo( i: Int ) {
case class Bar( d: Double ) {
def get = d
}
case class Foo( i: Int ) {
}
case class Bar( d: Double ) {
def get = d
}
//OR
case class Foo( i: Int ) {
case class Bar( d: Double ) {
def get = d
}
}
//OR even (still won't compile but the structure is correct so the compiler will proceed with
//another error)
case class Foo( i: Int ) {
case class Bar( d: Double ) { }
def get = d
}
hello.scala:3: error: Missing closing brace `}' assumed here
def get = d
关于parsing - scalac缺少右括号错误报告,行号奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12050166/
我正在为 Scala 开发 servant-server 端口。这个想法是使用类型类解析来归纳构建可以处理请求的函数。我遇到了一些我不太明白的奇怪推理问题。 object Servant {
我设置了 -Xfatal-warnings我的 SBT 构建中的编译器标志,果然这段代码不能编译: package example sealed trait Errors object Errors
在GCC compiler we see几个'intermediate languages ':RTL , GENERIC and GIMPLE . This answer hints在 scalac
scalax -Xlint 帮助提供以下信息: $ scalac -Xlint:help Enable or disable specific warnings adapted-args
我想拆分我的 scalac插件到多个文件中。这听起来很简单,但由于来自 import global._ 的路径相关类型问题,我还没有设法实现它。线。 这是 Lex Spoon 的示例插件: packa
我正在将一个大型项目升级到 2.10.4 到 2.11.4。我的编译器崩溃了,无论如何要显示 的名称吗?源文件 那是导致崩溃的原因吗?我可以使用“last everitt/compile:compil
为什么这不能编译? 给出的错误是 class SomeElement needs to be abstract, since method eval in trait Element of type
我刚刚注意到我的代码中有一个错误,我在其中创建了一个新变量,但后来未能实际使用它。 我认为 scalac 会告诉我我的新变量未使用,但情况似乎并非如此,在搜索了少量谷歌搜索/手册页后,我找不到任何关于
在像这样的伴生对象上定义 val 时: object Foo { val bar = 3 } Scala 生成静态 final方法: $ scalac Foo.scala && javap Foo p
我们在以下情况下使用 Scalac -Xfatal-warnings 时会遇到问题: 宏内部使用的隐式值 宏自动生成的内部值 在这两种情况下,我们都看到 Scalac 无法编译,因为它检测到一些值未被
根据 Scala 教程,我们需要先使用 scalac filename.scala 编译 Scala 代码,然后再使用 scala filename 执行它。但是当我像 scala filename.
在 Martin Odersky 的“Programming in scala”一书中,它解释了 scalac 看起来很慢的原因(第 114 页): The reason is that every
我知道使用 -Werror 和 -Xfatal-warnings 我可以将警告作为错误,但是否仍然可以在编译输出中看到所有警告,但只会让其中的一些变成错误? 最佳答案 我不这么认为,单独使用 scal
我写了以下非常简单的测试: import scala.collection.immutable.HashSet class Test { def m() = { var s = new H
如果我运行“scalac -explaintypes”并看到类似的内容: Nothing NoType (base ne tr1) && base <: X?" mean?,我们在Sta
这是一段代码示例,第一印象看起来像 scalac。可以很容易地优化掉: val t0 = System.nanoTime() for (i <- 0 to 1000000000) {} val t1
首先。考虑以下代码 scala> val fail = (x: Any) => { throw new RuntimeException } fail: Any => Nothing = scala
我有一个 ScalaTest 2 类,它扩展了 GeneratorDrivenPropertyChecks,还间接扩展了 FeatureSpec 和 Matchers(通过我写的扩展那些的特征两个类)
我创建了一个小示例程序来尝试找出为什么没有编译更大的程序。 val o1: Ordered[Int] = 1 val o2: Ordered[Int] = 2 println(o1 java.lan
我列出了今天发现的问题的简短列表。我是 scala 新手,因此我的问题可能很微不足道。 假设我们有一个这样的类: abstract class A[+T] { def foo[S >: T](x: S
我是一名优秀的程序员,十分优秀!