clojure - 如何在 Clojure 中创建可调用对象?

标签 clojure callable

如何在 Clojure 中创建可调用类型或对象?

例如,如何定义一个记录 Foo 并采用单个值 :bar 来调用该记录来打印该值?

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

最佳答案

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

((Foo.“你好,世界!”))

;; =>你好,世界!

(:bar (Foo.“你好,世界!”))

;; =>“你好,世界!”

...这样做是否是一个好主意是另一个问题。

<小时/>

Records implementing IFn

(defrecord Foo [bar]
  clojure.lang.IFn
  (invoke [_] (println bar))
  (applyTo [this args] (clojure.lang.AFn/applyToHelper this args)))

关于clojure - 如何在 Clojure 中创建可调用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4358528/

相关文章:

Clojure 秘书 - URL 更改时的调度

clojure - clojure a 与非标准迭代 java API 的互操作

multithreading - 保证 future 从某一点开始吗?

java - java中如何处理抛出检查异常的方法

java - 返回值的Java并发方法调用

php - 类变量函数

Clojure - 对象的默认协议(protocol)实现失败?

data-structures - Clojure:我有很多已排序的 map ,并希望按顺序减少所有键的 super map -> 向量

java - 如何在Java中的Lambda函数中调用父类中的方法?

java - "right"放入一个Callable有多少逻辑?