Clojure(Script)静态协议?

4

ClojureScript库Om Next使用了静态协议。我以前从未见过这种方式,想知道它是Om特有的概念还是语言的实际部分。以下是简化的代码片段:

(deftype type
  static IProtocol
  (some-method [this] "val"))

这个到底是做什么的?(在REPL中输入它不会出现任何错误,所以我认为它与Om无关)。
1个回答

3

deftype是一种低级特性,它是Clojure语言的构建方式。它在核心上只是一个Java类构造器,用于设置字段和方法。Java中的static是一个关键字,表示所声明的方法是类的成员,而不是类的实例成员,因此可通过继承全局使用。 defui是一个宏,与deftype非常相似,但不是用于类的构造器,而是用于javascript对象原型的构造器,这些原型是类比的。主要区别在于它不需要字段只需要方法。对象原型可以被实例化,因此为了使所有实例都能统一使用行为,它们需要具有静态字段。


所以 static 关键字只适用于 Om 中的 defui 宏吗?还是它也可以像 deftype 一样使用,并以类似的方式(但使用字段,使它们静态)? - George
1
static 关键字是特定于 defui 的,这个关键字类似于 Java 类构造函数中的使用方式。defui 的总体功能与deftype 相同,可以创建可实例化的类/对象/原型/东西。 - Ricardo Acuna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接