我正在使用一种名为Jack的语言,作为Nand2Tetris课程的一部分。
这会编译并生成运行时期望的输出:
class Main {
function void main() {
var Foo f;
do f.doSomething();
return;
}
}
class Foo {
method void doSomething() {
do Output.printString("Hello, world!");
return;
}
}
但是当我添加一行......
class Main {
function void main() {
var Foo f;
do f.doSomething();
var int i; // doesn't seem to matter what's here, anything breaks it
return;
}
}
...我得到了这个编译错误:
在Main.jack中(第6行):在子程序main中:预期语句(do,let,while,return或if)
为什么附加行有所作为?
答案 0 :(得分:2)
有些编程语言比其他语言更有条理。 杰克在允许你声明变量的地方似乎非常严格。
按照杰克的介绍,您提供了:
subroutine_type name (parameter-list) {
local variable declarations
statements
}
将变量i声明移动到它所属的位置可以解决您的问题。
class Main {
function void main() {
var Foo f;
var int i;
do f.doSomething();
return;
}
}