【发布时间】:2012-01-27 12:28:07
【问题描述】:
我开始学习 Scala,我会做一个简单的交叉编译器。
我将支持一小部分指令,例如打印。
注意:代码 sn-ps 未经测试或编译。
这是我在 JAVA 中要做的事情。
public interface Compiler{
String getPrintInstruction();
}
public class JavaCompiler implements Compiler{
public String getPrintInstruction(){
return "System.out.print(arg0);"
}
}
public class ScalaCompiler implements Compiler{
public String getPrintInstruction(){
return "print(arg0);"
}
}
下面的sn-p是正确的“Scala方式”吗?
trait Compiler {
var printInstruction: String
}
class JavaCompiler extends Compiler {
var printInstruction = "System.out.print(arg0);"
}
class ScalaCompiler extends Compiler {
var printInstruction = "print(arg0);"
}
编辑:
我将把我的第二个问题移到一个新线程。
【问题讨论】:
-
你声明的变量在你给它一个值之前是没有定义的。尝试在不为 printInstruction 提供值的情况下扩展 Compiler。如果给它一个非字符串值,如 42,这并不是真正的重新声明。
-
我不明白,请多多包涵:),它似乎已定义,因为如果我给它赋值 42,编译器会写:覆盖 String 类型的 trait Compiler 中的变量 printInstruction;变量 printInstruction 的类型不兼容
-
您的变量definition 中出现错误,因为超类中的变量declaration 具有不兼容的类型。我们声明了一个 String 类型的变量 printInstruction,我们将该值的值定义为例如“hi”。与java相反,您不能省略定义并获得默认值(null或0)。在这方面,'var x: String' 是抽象的,就像方法是抽象的一样;但是这个词没有被使用,它是未定义的。
-
我认为我们彼此误解了很多,但我知道我只是粘贴它来告诉你编译器知道它是一个字符串,因此不是未定义的。感谢您的解释,尽管我已经开始了一个新线程,因为这对于 cmets 字段来说太长了。
标签: java oop scala inheritance traits