つまり、 は の~
場合と同様に、構文引用符で囲まれた形式で式を評価します~fn-name
。この場合、評価する式は'name
であり、結果は修飾されていない記号name
です。
ただし、これを一度に 1 つずつ分解してみましょう。
非修飾シンボルしかない場合は、実行時に1name
と評価されます。これにより、フォームが正しくなくなり、コンパイラ例外が発生します。clojure.core/name
defn
(defn greeting [clojure.core/name] (str "Hello" name))
引用符で囲まれた非修飾シンボルしかない場合'name
でも、実行時に評価されます。違いは、 に展開されること(quote clojure.core/name)
です。繰り返しますが、これは不適切なdefn
形式になり、コンパイラ例外が発生します。
(defn greeting [(quote clojure.core/name)] (str "Hello" name))
最後に、 を使用~'name
すると、引用された形式がコンパイル時に評価され、修飾されていない記号 が生成されname
、適切なdefn
形式が得られます。
(defn greeting [name] (str "Hello" name))
name
1 - これは、別の関数が存在しないことを前提としているため、この例に当てはまります。