core.match可以用来添加对象的类型信息吗?

时间:2015-07-14 20:42:09

标签: 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 -> 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-stringy无法应用于参数:

     

域:     串

     

参数:     对象

     

范围:     串

     

预期类型:     串

有没有办法让它使用core.match?

谢谢!

0 个答案:

没有答案