Clojure String Rückgabewerte

7

nur eine kurze Frage beim Betrachten von Clojure ....

In Anbetracht der folgenden REPL-Sitzung:

%Vor%

Warum wird der String-Balken nicht durch die Druckfunktion angezeigt? Es scheint, als ob der Leser versucht, den Rückgabewert von foo (der ein String zu sein scheint) als Funktion aufzulösen? Wie sollte foo definiert werden, dass print die Zeichenfolge in die Kommandozeile schreibt?

    
echox 26.03.2011, 20:54
quelle

2 Antworten

16

Ich bin immer noch ein bisschen schwach auf Clojure im Vergleich zu verschiedenen anderen Lisp-Likes, aber das ist nicht richtig, oder? Sollte

sein %Vor%

andernfalls haben Sie eine Funktion definiert, die versucht, die Zeichenfolge "bar" als Funktion aufzurufen, die mit Ihrem Fehler übereinstimmt.

%Vor%     
geekosaur 26.03.2011, 21:02
quelle
6

weil Clojure versucht, das erste Element der any-Liste als Funktionsnamen "aufzulösen" Wenn Sie in der letzten Anweisung die Druckfunktion aufgerufen haben, wird sie mit einem Argument aufgerufen Liste (foo), die als Aufruf der Funktion foo interpretiert wird. so weit so gut.

aber die Funktion foo gibt die Liste ("bar") zurück, was nicht ok ist..es wird wie ein Aufruf der Funktion "bar" interpretiert, die nicht erlaubt ist ..

wenn foo wie (defn foo [] "bar") ist, dann funktioniert es, weil print nicht ("bar") sondern nur "bar" empfängt und mache das Drucken

    
Vitomir Kovanovic 26.03.2011 21:01
quelle

Tags und Links