我试图按照 Scala编程一书中的第6.2章构建理论。 但是在尝试这样做时我遇到了问题。
这是 test.scala 。
class Rational(n: Int, d: Int)
{ println("Created "+n+"/"+d)
}
所以我先在终端窗口输入以下内容。
user$ scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_73).
Type in expressions to have them evaluated.
Type :help for more information.
然后使用:load test.scala
scala> :load test.scala
Loading test.scala...
defined class Rational
<console>:12: error: not found: value n
println("Created "+n+"/"+d)
^
<console>:12: error: not found: value d
println("Created "+n+"/"+d)
^
当我输入new Rational(1, 2)
时,我期待着。
Created 1/2
res0: Rational = Rational@90110a
但结果是
res0: Rational = Rational@9e89d68
解释器只返回第二行。如何打印出此调试消息?
BTW,我正在使用Mac OS。
任何帮助将不胜感激。提前谢谢。
更新
这是正确的做法。
class Rational(n: Int, d: Int){
println("Created "+n+"/"+d)
}
答案 0 :(得分:7)
分号推断正在破坏你的一天。
Scala编译器解释
class Rational(n: Int, d: Int)
{ println("Created "+n+"/"+d)
}
作为
class Rational(n: Int, d: Int);
{ println("Created "+n+"/"+d);
}
糟糕!
请改为尝试:
class Rational(n: Int, d: Int) {
println("Created "+n+"/"+d)
}
编译器不再在第一行的末尾推断出分号,因为打开的大括号表示还有更多的分号。
它应该工作得更好。
答案 1 :(得分:3)
错误的原因是test.scala文件中的代码实际上被评估为两个单独的语句。 之所以如此,是因为在这种情况下,行分隔符被视为分号。
分号推理规则: http://jittakal.blogspot.com/2012/07/scala-rules-of-semicolon-inference.html
如果您将其更改为(一行):
class Rational(n: Int, d: Int) { println("Created "+n+"/"+d) }
或更好:
class Rational(n: Int, d: Int) {
println("Created "+n+"/"+d)
}
那么它会表现得像你期望的那样。