2010-06-15 2 views
1

Я не могу на всю жизнь получить списки: keyfind работать, как я ожидаю в Erlang.списки: проблемы с ключом

Я следующий тест eunit:

should_find_key_test() -> 
    NewList = lists:keystore("key", 1, [], {"key", "value"}), 
    Value = case lists:keyfind("key", 1, NewList) of 
     false -> 
      notfound; 
     {_key, _value} -> 
      _value 
    end, 
    ?debugVal(Value). 

Всякий раз, когда я запускаю этот тест, я получаю следующее сообщение об ошибке:

indextests: should_find_key_test (модуль 'indextests') ... не удалось :: ошибка: UNDEF в списках функций: keyfind/3 называется keyfind ("ключ", 1, [{ "ключ", "значение"}]) в вызове от indextests: should_find_key_test/0

Может ли кто-нибудь увидеть, что я делаю неправильно?

Говорят, что списки: keyfind больше не существует?

+0

Какая версия Erlang вы используете? 'lists: keyfind/3' довольно недавно, хотя я не могу вспомнить, в какой версии он был добавлен. – rvirding

ответ

3

списки: keyfind/3 был введен в OTP/R13A. Я подозреваю, что вы используете более старую версию. До R13A вы бы использовали списки: serachkey/3. Тот же кортеж найден, но возвращаемые данные немного отличаются друг от друга.

should_find_key_test() -> 
    NewList = lists:keystore("key", 1, [], {"key", "value"}), 
    Value = case lists:keysearch("key", 1, NewList) of 
     false -> 
      notfound; 
     {value {_Key, _Value}} -> 
      _Value 
    end, 
    ?debugVal(Value). 

release notes показать keyfind/3 БИФ добавляют в STDLIB версии 1.6. Проверьте версию STDLIB.

+0

действительно была версией эрланга. В инструкциях по установке, которые я прочитал, предлагается загрузить версию R12A. – dagda1

Смежные вопросы