2009-08-20 41 views
4

我想在Erlang中编写一个简单的Thrift服务器,它接受一个字符串并返回一个字符串。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,[{服务器,测试, [< < “w00t” >>]},
{服务器,handle_function,2},...

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

回答

6

适用的最后一个参数应该是参数,以 '测试' 列表,例如,如果tuple_to_list(参数)导致:

[1] 

...然后:

test(1) 

如果tuple_to_list(Args)导致:

[1,2] 

...然后:

test(1,2) 

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

[<<"woot">>] 

...所以:

test(<<"woot">>) 

...但测试的签名请求列表作为论点,所以存在不匹配。

+0

啊哈。我应该更仔细地研究应用函数的文档。我假定自从Args是我的函数需要接收一个的列表。另外,我需要指出一个二进制参数la:test(<>) - > – steamer25

+0

你是什么意思“指示二进制参数”? – rvirding

+0

@rvirding在Erlang中,Thrift字符串表示为二进制数据。我的功能必须接收<>,然后用binary_to_list(X)对其进行解码。 – steamer25

相关问题