为什么分配在Dart中的工作方式与在Python中不同?

问题描述

当我运行此代码时:

void readCard(db,[int card_id = -1]) {
    if (card_id == -1) {
        final ResultSet result = db.select('SELECT * FROM cards');
    }

    else {
        final ResultSet result = db.select("""
                SELECT * FROM cards
                WHERE card_id=(?)
                """); // this doesn't work yet
    }

    for (final Row card in result) {
        print(
                "Card {'card_id': ${card['card_id']},"
                "'due': ${card['due']},"
                "'content': ${card['content']}}"
                );
    }
}

我收到此错误

memotext.dart:66:25: Error: Getter not found: 'result'.
        for (final Row card in result) {
                               ^^^^^^

因为分配了result而不管if语句或else语句是否运行,都应该没有错误?这与dart的分配方式有关吗?

解决方法

结果在各自的块中声明,它不存在于外部。这样做:

void readCard(db,[int card_id = -1]) {
    ResultSet result;
    if (card_id == -1) {
        result = db.select('SELECT * FROM cards');
    }

    else {
        result = db.select("""
                SELECT * FROM cards
                WHERE card_id=(?)
                """); // this doesn't work yet
    }

    for (final Row card in result) {
        print(
                "Card {'card_id': ${card['card_id']},"
                "'due': ${card['due']},"
                "'content': ${card['content']}}"
                );
    }
}