4

文字列を受け取って文字列を返す単純な 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 を取得しています。スタック トレースには、次のように表示されます。

{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 に答える