今天我尝试在 Java 中编写(大致)以下代码

//Java
Scope scope = declaration.getContainer();
do {
    if (scope.getDirectMemberOrParameter(model.getName())!=null) {
        node.addError("duplicate declaration name: " + declaration.getName());
    }
    boolean isControlBlock = scope instanceof ControlBlock;
    scope = scope.getContainer();
}
while (isControlBlock);  //compile error

这不起作用,因为 Java 并不认为while条件表达式属于do块。我认为这是错误的。当然,循环应该被允许计算它自己的终止条件?我意识到do/while是一个相当不常见的结构,但当它

确实使用时,我想它通常会被这样使用。唯一的合理方法来修复上述代码是将isControlBlock

//Java
boolean isControlBlock;
Scope scope = declaration.getContainer();
do {
    if (scope.getDirectMemberOrParameter(model.getName())!=null) {
        node.addError("duplicate declaration name: " + declaration.getName());
    }
    isControlBlock = scope instanceof ControlBlock;
    scope = scope.getContainer();
}
while (isControlBlock);

的声明移出循环唯一的合理方法来修复上述代码是将注意现在是一个.

变量。我将无法将其声明为

//Ceylon
variable local scope = declaration.container;
do {
    if (scope.directMemberOrParameter(model.name) exists) {
        node.addError("duplicate declaration name: " + declaration.name);
    }
    local isControlBlock = scope is ControlBlock;
    scope = scope.container;
}
while (isControlBlock);

final


返回顶部