Erlang 节俭/二郎弦

Erlang 节俭/二郎弦,erlang,thrift,Erlang,Thrift,我试图用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. te

我试图用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\u子句。堆栈跟踪显示以下内容:

{function_子句,[{server,test, []},
{server,handle_函数,2}


我的handle_函数是从教程文件复制的,因此如果需要调整它,我不会感到惊讶。有什么想法吗?

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

[1]
[1,2]
…然后:

test(1)
test(1,2)
如果
元组到列表(Args)
导致:

[1]
[1,2]
…然后:

test(1)
test(1,2)
因此,如果将
{}
传递到
tuple\u to\u list
,则将是:

[<<"woot">>]
[]
……因此:

test(<<"woot">>)
test()

…但是test的签名要求一个列表作为参数,因此存在不匹配。

Aha。我应该更仔细地查看apply函数的文档。我假设因为Args是一个列表,所以我的函数需要接收一个。另外,我需要指示一个二进制参数a la:test()->“指示二进制参数”是什么意思?@rvirding在Erlang中,一个节俭字符串被表示为二进制数据。我的函数必须接收并使用二进制_to_列表(X)对其进行解码。