3

作为Nand2Tetris课程的一部分,我正在使用一种名为Jack的语言。

这会编译并产生我在运行时期望的输出:

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)

为什么附加线会有所作为?

4

1 回答 1

4

有些编程语言比其他语言更结构化。对于允许声明变量的地方,Jack 似乎非常严格。

在您提供的 Jack 演示之后:

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;
    }
} 
于 2016-04-27T10:18:52.403 回答