Clojure: So erstellen Sie eine Funktion zur Laufzeit

8

Ich möchte zur Laufzeit ein Fn erzeugen (d. h. der Name und die Arg-Symbole werden zur Laufzeit und nicht im Code bestimmt) Was ist der beste Weg, dies zu erreichen?

Wie kann ich zum Beispiel die folgende Funktion implementieren?

%Vor%

das würde so verwendet werden:

%Vor%

Beachten Sie, dass der Funktionsname, die Argumente und der Text nicht codiert sind, aber zur Laufzeit festgelegt werden können.

    
GabiMe 01.12.2009, 09:09
quelle

3 Antworten

12
%Vor%

Und einige verwenden:

%Vor%

Allerdings mag ich diesen Ansatz nicht wirklich. Es riecht wirklich schwer: eval . Warum möchten Sie zur Laufzeit Globals generieren? Ich sehe verschiedene Probleme mit falschen Namensräumen und anderen hässlichen Schluckauf am Horizont ...

    
kotarak 01.12.2009, 09:23
quelle
1

Eine andere Möglichkeit ist die Verwendung von "eval" und "read-string":

user = & gt; (def f1 (eval (gelesene Zeichenkette) (fn [x y] (* x y)) ")))

# 'Benutzer / f1

user = & gt; (f1 3 5)

15

    
jamesqiu 07.02.2011 07:36
quelle
0

Ich bin mir nicht ganz sicher, aber ich glaube, Sie könnten dies mit einem Makro tun, das Eval überlegen wäre.

%Vor%     
Jeremy Wall 01.12.2009 14:51
quelle