Комиссионная / Эрлангская струна - PullRequest
4 голосов
/ 20 августа 2009

Я пытаюсь написать простой сервер Thrift на Erlang, который принимает строку и возвращает строку.

Кажется, все работает до момента вызова моей функции:

handle_function(Function, Args) when is_atom(Function), is_tuple(Args) ->
case apply(?MODULE, Function, tuple_to_list(Args)) of
    ok -> ok;
    Reply -> {reply, Reply}
end.

test([X]) ->
"You sent: " ++ X.

Я получаю функцию-клаузулу. Трассировка стека показывает следующее:

{function_clause, [{server, test, [<< "w00t" >>]},
{server, handle_function, 2}, ...

Моя функция handle_function скопирована из учебного файла, поэтому я не удивлюсь, если мне нужно ее настроить. Есть идеи?

1 Ответ

6 голосов
/ 20 августа 2009

Последним аргументом применения должен быть список аргументов для «теста», например, если tuple_to_list (Args) привел к:

[1]

... тогда:

test(1)

Если tuple_to_list(Args) привело к:

[1,2]

... тогда:

test(1,2)

Итак, если {<<"woot">>} передается tuple_to_list, это будет:

[<<"woot">>]

... так:

test(<<"woot">>)

... но подпись теста запрашивает список в качестве аргумента, поэтому существует несоответствие.

...