6

Clojureで呼び出し可能な型またはオブジェクトをどのように作成しますか?

たとえば、その値を出力するために呼び出すことができるFoo単一の値をとるレコードをどのように定義できますか?:bar

user=> (def foo (Foo. "Hello world"))
user=> (foo)
Hello World
user=> (:bar foo)
"Hello World"
4

1 に答える 1

10
(defrecord Foo [bar]
  clojure.lang.IFn
  (invoke [_] (println bar)))

((Foo. "Hello, world!"))

;; => Hello, world!

(:bar (Foo. "Hello, world!"))

;; => "Hello, world!"

...これが良いアイデアかどうかは別の問題です。


IFnを実装した記録

(defrecord Foo [bar]
  clojure.lang.IFn
  (invoke [_] (println bar))
  (applyTo [this args] (clojure.lang.AFn/applyToHelper this args)))
于 2010-12-05T12:39:30.647 に答える