erlang: Fehler beim Spawn (Knoten, Spaß): badfun error

8

Der Remote-Knoten befindet sich in der anderen Maschine.

Ich teste vom lokalen Knoten:

%Vor%

Sie können sehen, dass spawn(node,module,function,args) funktioniert, aber spawn(node,fun) nicht.

Die Erlang-Version auf dem Remote-Knoten ist R15, während die Version auf dem lokalen Knoten R17 ist. Ist es der Grund? Weil das Codeformat anders ist? Mir ist nicht klar, wie Erlang den Spaß-Typ bei der Übergabe an den Remote-Knoten anordnet. In Bytecode?

Hilfe bitte!

    
kingluo 04.07.2015, 13:15
quelle

1 Antwort

9

Da die Fehlermeldung, die Sie erhalten haben, angezeigt wird, wird die anonyme Funktion in diesem Kontext im Wesentlichen so behandelt, als wäre sie im Modul erl_eval definiert. Wenn Sie die gleiche Version von erl_eval sowohl auf dem sendenden als auch auf dem empfangenden Knoten haben, funktioniert alles einwandfrei, da in diesem Fall beide Kopien von erl_eval die gleiche Version und Prüfsummen haben, so dass der empfangende Knoten korrekt auswerten kann anonyme Funktion, die vom sendenden Knoten übergeben wurde. Wenn die beiden Knoten jedoch unterschiedliche erl_eval -Module haben, schlägt die Auswertung der anonymen Funktion fehl.

Eine interessante Sache ist es, die anonyme Funktion auf dem R15-Knoten zu definieren, sie in eine Binärdatei über term_to_binary/1 zu konvertieren, die resultierende Binärdatei an den 17.x-Knoten zu senden oder zu kopieren und sie wieder in einen Ausdruck umzuwandeln binary_to_term/1 , und übergeben Sie den resultierenden Ausdruck als anonyme Funktion an Ihren spawn -Aufruf. Zuerst auf dem R15-Knoten:

%Vor%

Lesen Sie nun die Binärdatei in den 17.x-Knoten und stellen Sie den spawn -Aufruf damit wieder auf den R15-Knoten:

%Vor%

Wie Sie sehen können - und Sie sollten es auch selbst ausprobieren - funktioniert der spawn -Aufruf wie erwartet, weil die anonyme Funktion auf dem R15-Knoten erstellt wurde und dort auch ausgewertet wird. Der Knoten 17.x reicht ihn nur durch.

    
Steve Vinoski 05.07.2015, 02:02
quelle

Tags und Links