Clojure 是否可以使用core.match添加对象的类型信息?
当我在Scala中工作时,我喜欢在类型上进行模式匹配,并且类型检查器将使用该类型:Clojure 是否可以使用core.match添加对象的类型信息?,clojure,clojure-core.typed,Clojure,Clojure Core.typed,当我在Scala中工作时,我喜欢在类型上进行模式匹配,并且类型检查器将使用该类型: val x : Any = "boop" x match { case y : String => do-something-stringy(y); case z : Int => .... etc } 我知道在core.typed中,条件将帮助类型检查器解析确切的类型。我尝试使用core.match复制此内容: (ann do-something-stringy [String ->
val x : Any = "boop"
x match {
case y : String => do-something-stringy(y);
case z : Int => .... etc
}
我知道在core.typed中,条件将帮助类型检查器解析确切的类型。我尝试使用core.match复制此内容:
(ann do-something-stringy [String -> String])
(defn do-something-stringy [message]
(str "Hello " message))
;; Doesn't work
(ann do-things [Object -> String])
(defn do-things [foo]
(match [(type foo)]
[String] (do-something-stringy foo)
:else "Nope"))
此操作失败并出现错误:
函数do something striny无法应用于参数:
域:
串
论据:
反对
范围:
串
使用预期类型:
串
有没有一种方法可以使用core.match使其正常工作
谢谢 尝试在
类
上分派,而不是类型
。core.typed对type
没有真正的支持,因为它在元数据方面很奇怪