2012-09-05 13 views
11

再実装評価を含む4Clojureの問題を解決するために、「Universal Computation Engine」をしようと、私は誤ってこのような何かを呼び出すことになったものの:むしろ意図より関数として使用するとClojureシンボルは何をしますか?

(apply '/ '(16 8)) 

(apply/'(16 8)) 

これは混乱を招く副作用を持っていたが8を返すと、私は私の数学を台無しにしたと思った。いくつかのデバッグは、私が呼び出そうとする前/シンボルを評価するために失敗した後

私は後で私のエラーを実現し、それを-のでclojure.lang.Symbolclojure.lang.IFnを実装しなければならないことに気づきました。しかし、その実装は何ですかdo?私がすることができるのは、1つの引数を指定してnilを返します。

+0

[Clojureシンボルに引数を渡すとどうなりますか?](http://stackoverflow.com/questions/8219305/what-happens-when-i-pass-arguments-to-a-clojure-シンボル) – amalloy

答えて

12

シンボルは、キーワードと同じように、地図でを見ています。したがって、与えられた例では

RTはすべてについてちょうどいた、clojure.lang.RTある "ランタイム"。?)

… 
122 public Object invoke(Object obj) { 
123   return RT.get(obj, this); 
124 } 
125 
126 public Object invoke(Object obj, Object notFound) { 
127   return RT.get(obj, this, notFound); 
128 } 
… 

(16マップではないので)、ルックアップが失敗している、と:Symbol's implementationを参照してください。 notFound値(8)が返されています。

関連する問題