Methods 能否在clojure defrecord中指定方法的返回类型?

Methods 能否在clojure defrecord中指定方法的返回类型?,methods,types,clojure,Methods,Types,Clojure,我已经创建了一个应用程序信息接口和一个类,但是当我查看生成的类时,所有方法的返回类型都是Object,我可以将返回类型更改为String吗?文档中说使用defrecord可以进行类型暗示,但没有给出示例,我能找到的唯一示例是类型暗示字段和方法参数 src/com/vnetpublishing.clj (ns com.vnetpublishing) (defprotocol ApplicationInfo (author [obj]) (author-email [obj]) (co

我已经创建了一个应用程序信息接口和一个类,但是当我查看生成的类时,所有方法的返回类型都是Object,我可以将返回类型更改为String吗?文档中说使用defrecord可以进行类型暗示,但没有给出示例,我能找到的唯一示例是类型暗示字段和方法参数

src/com/vnetpublishing.clj

(ns com.vnetpublishing)

(defprotocol ApplicationInfo
  (author [obj])
  (author-email [obj])
  (copyright [obj])
  (app-name [obj])
  (version [obj])
)
src/Physics.clj

(ns Physics)

(defrecord info [] com.vnetpublishing.ApplicationInfo
  (author [this] "Ralph Ritoch")
  (author-email [this] "Ralph Ritoch <root@localhost>")
  (copyright [this] "Copyright \u00A9 2014 Ralph Ritoch. All rights reserved.")
  (app-name [this] "Physics")
  (version [this] "0.0.1-alpha")
)
(ns物理)
(defrecord info[]com.vnetpublishing.ApplicationInfo
(作者[本]“拉尔夫·里托赫”)
(作者电子邮件[此]“拉尔夫·里托赫”)
(版权[本]“版权所有\u00A9 2014拉尔夫·里托赫。保留所有权利。”)
(应用程序名称[此]“物理”)
(版本[本]“0.0.1-alpha”)
)

您可以键入提示协议

(defprotocol ApplicationInfo
  (author ^String [obj])
  ; ...
  )
但有人告诉我,这种类型的提示可能会被忽略(见后续问题)

看看宏。 与defprotocol不同,definterface宏提供了一种为方法编写返回类型提示的方法

艾伦·马洛伊(Alan Malloy)很好地解释了这一点:

“协议供Clojure函数使用,而Clojure函数不是 应该是静态类型的;接口供用户使用 Java类,需要静态类型。”

然后,您可以像这样使用它:

(definterface Test
 (^void returnsVoid [])
 (^int returnsInt [])
 (^long returnsLong [])                                                             
 (^String returnsString [])
 (^java.util.HashMap returnsJavaUtilHashMap []))

那么你是在问别人的问题吗?