Ich habe mir die Referenzen angesehen: Ссылка , Ссылка
sowie clojure und ^: dynamic und Dynamische Bindung von Clojure
Ich verstehe immer noch nicht, warum binding
überhaupt gebraucht wird, da jedes Programm, das ich geschrieben habe, ohne sie war und ich Wege finden kann, die Beispiele konventionell zu schreiben - was ich verständlicher finde. Gibt es Beispiele von Projekten / Programmierparadigmen, die davon Gebrauch machen?
zum Beispiel ... im Tier sprechen Sie beispielsweise einen ähnlichen Effekt mit:
%Vor%keine Makros, keine dynamische Bindung ... immer noch sehr sauber.
Es gibt nicht strikt eine Notwendigkeit für sie: wie Sie richtig beobachten, können Sie tun, was Sie wollen, ohne binding
, und tatsächlich, wenn binding
nicht existierte, könnten Sie Implementieren Sie es relativ einfach mit Makros und Javas ThreadLocal
s.
Die Bindung ist jedoch nützlich, um dynamischer Kontext an eine Funktion zu übergeben, ohne einen Parameter explizit übergeben zu müssen.
Dies ist besonders nützlich, wenn Sie tief verschachtelte Funktionen höherer Ordnung verfassen und keine zusätzlichen Parameter zu jeder einzelnen Funktion im Aufruf-Stack hinzufügen möchten, um einen Wert an die tieferen Funktionen zu übergeben, die tief in ihnen eingebettet sind. p>
Um an Ihrem Beispiel aufzubauen:
%Vor% Hinweis: Ich musste der Funktion speak
keinen zusätzlichen Parameter hinzufügen, um ein anderes Verhalten zu erhalten. Das Hinzufügen eines zusätzlichen Parameters wäre in diesem Fall trivial, aber stellen Sie sich vor, wenn die Funktion speak
tief in einer komplexen Funktion höherer Ordnung vergraben wäre .....
Dennoch denke ich, dass der beste Rat überhaupt darin besteht, eine dynamische Bindung zu vermeiden, es sei denn, Sie brauchen sie wirklich. In der Regel ist es besser, explizite Parameter hinzuzufügen, wenn Sie Folgendes tun können: Direkte Parameter erleichtern das Testen und Begründen von Funktionen.
Ich folge nur weiter oben auf mikers Beispiel. Ich kann sehen, warum du es in einer weniger ausdrucksstarken Sprache machst, aber weil clojure so ausdrucksstark ist, würde ich es lieber umschreiben ... Die loud-noise
Funktion kann leicht verändert werden, Um den gleichen Effekt zu erreichen, fügen Sie zusätzliche Parameter hinzu, um zu sprechen ...
Ist die Bindung nur eine Möglichkeit, eine schnelle und schmutzige Lösung zu hacken, wenn Sie den ursprünglichen Code nicht ändern können?
Tags und Links clojure dynamic-scope