2

dos_key_exist を実装しようとしていますが、以下のコードで実行できると思いました。しかし、コンパイルエラー key not found 行が表示されます: Result := not (x.key = key)

does_key_exist(key: attached STRING):BOOLEAN
    do
        Result := not data.item(hash(key)).for_all (agent (x:like pair_at):BOOLEAN
            do
                Result := not equal(x.key, key)
            end)
    end

定義:

pair_at(key:attached STRING):TUPLE[key:STRING;value: like value_at]
    require
        does_key_exist(key)
    deferred
    ensure
    end

list_at(key:STRING) : LINKED_LIST[like pair_at]
        require
            does_key_exist(key)
        end

data : ARRAY[like list_at]
4

1 に答える 1

2

Eiffelのインラインエージェントは、現在のオブジェクトの属性にアクセスできますが、ローカルや引数にはアクセスできません。これらは、クラスの通常の機能に基づいて構築される「通常の」エージェントの単なる構文糖衣です。後者は、ローカルまたは他の機能の引数にアクセスできません。したがって、引数を明示的に渡すことでコードを修正できます。

does_key_exist (key: STRING): BOOLEAN
    do
        Result := not data.item (hash (key)).for_all
            (agent (x: like pair_at; y: STRING): BOOLEAN
                do
                    Result := not equal(x.key, y)
                end
            (?, key))
    end
于 2012-06-20T18:51:51.227 に答える