Clojure(Script) 静态协议?
Clojure(Script) Static Protocols?
ClojureScript 库 Om Next 使用 静态协议 。我以前从未见过这个,我想知道它是一个特定于 Om 的概念,还是该语言的实际部分。这是一个简化的向下代码片段:
(deftype type
static IProtocol
(some-method [this] "val"))
这到底是做什么的? (将它输入 REPL 不会产生任何错误,所以我相信它不是特定于 Om 的)。
deftype 是语言的低级特性,Clojure 就是这样构建的。它的核心只是一个 java Class 构造函数,它设置字段和方法。 java 中的静态是一个关键字,表示声明的方法是 Class 的成员,而不是 Class 的实例的成员,因此通过继承对实例全局可用。 defui 是一个很像 deftype 的宏,但它不是 Classes,而是 javascript 对象原型的构造函数,它们是类似的。主要区别在于它不采用字段,而只采用方法。对象原型可以被实例化,所以为了让行为对所有实例统一可用,它们需要有静态字段。
ClojureScript 库 Om Next 使用 静态协议 。我以前从未见过这个,我想知道它是一个特定于 Om 的概念,还是该语言的实际部分。这是一个简化的向下代码片段:
(deftype type
static IProtocol
(some-method [this] "val"))
这到底是做什么的? (将它输入 REPL 不会产生任何错误,所以我相信它不是特定于 Om 的)。
deftype 是语言的低级特性,Clojure 就是这样构建的。它的核心只是一个 java Class 构造函数,它设置字段和方法。 java 中的静态是一个关键字,表示声明的方法是 Class 的成员,而不是 Class 的实例的成员,因此通过继承对实例全局可用。 defui 是一个很像 deftype 的宏,但它不是 Classes,而是 javascript 对象原型的构造函数,它们是类似的。主要区别在于它不采用字段,而只采用方法。对象原型可以被实例化,所以为了让行为对所有实例统一可用,它们需要有静态字段。