2009-08-20 8 views
4

Ich versuche, einen einfachen Thrift-Server in Erlang zu schreiben, der eine Zeichenfolge und eine Zeichenfolge zurückgibt.Thrift/Erlang String

Alles scheint der Aufruf meiner Funktion auf den Punkt Aufarbeiten zu werden:

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. 

Ich bin ein function_clause bekommen. Der Stack-Trace zeigt folgendes:

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

Meine Handle_Funktion wurde aus der Tutorial-Datei kopiert, so dass ich nicht überrascht sein werde, wenn ich es zwicken muss. Irgendwelche Ideen?

Antwort

6

Die letzte Argument gelten sollte eine Liste von Argumenten zu 'Test', zum Beispiel, wenn tuple_to_list (Args) ergibt:

[1] 

... dann:

test(1) 

Wenn tuple_to_list(Args) ergab folgende Treffer:

[1,2] 

... dann:

test(1,2) 

Also, wenn {<<"woot">>} zu tuple_to_list übergeben wird, das wird sein:

[<<"woot">>] 

... so:

test(<<"woot">>) 

... aber Test Unterschrift bittet um eine Liste als Argument, also gibt es eine Diskrepanz.

+0

Aha. Ich hätte mir die Dokumente für die Anwendungsfunktion genauer ansehen sollen. Ich nahm an, da Args eine Liste war, die meine Funktion benötigen würde, um eine zu erhalten. Außerdem musste ich einen binären Parameter a la angeben: test (<>) -> – steamer25

+0

Wie meinst du "einen binären Parameter angeben"? – rvirding

+0

@rvirding In Erlang wird eine Thrift-Zeichenfolge als Binärdaten dargestellt. Meine Funktion musste < empfangen und dann mit binary_to_list (X) dekodieren. – steamer25