据我所知,Clojure使解决"表达问题"变得"容易".
但我找不到如何做到这一点的细节.如何创建一个处理空的东西的新类型(如defrecord)?和数?
这两个例子是空的?和count函数是Clojure核心的一部分,它们的实现是由性能考虑因素驱动的,因此它们可能不是解决表达式问题的最佳例子.无论如何:
示例代码:
(deftype Tuple [a b]
clojure.lang.Counted
(count [_] 2)
clojure.lang.Seqable
(seq [_] (list a b)))
(count (->Tuple 1 2)) ;=> 2
(empty? (->Tuple 1 2)) ;=> false
Run Code Online (Sandbox Code Playgroud)
新功能的更通用的解决方案是:
在任何一种情况下,您都可以随时为新类型或现有类型创建默认实现和新实现.即使在运行时!