4

我正在尝试在 Erlang 中编写一个简单的 Thrift 服务器,它接受一个字符串并返回一个字符串。

一切似乎都在调用我的函数:

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。堆栈跟踪显示以下内容:

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

我的 handle_function 是从教程文件中复制的,所以如果我需要调整它,我不会感到惊讶。有任何想法吗?

4

1 回答 1

6

apply 的最后一个参数应该是 'test' 的参数列表,例如,如果 tuple_to_list(Args) 导致:

[1]

...然后:

test(1)

如果tuple_to_list(Args)导致:

[1,2]

...然后:

test(1,2)

所以,如果{<<"woot">>}被传递给tuple_to_list,那将是:

[<<"woot">>]

...所以:

test(<<"woot">>)

...但是测试的签名要求一个列表作为参数,所以不匹配。

于 2009-08-20T02:55:55.543 回答