2009-08-20 39 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

相關問題