首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >core.match在类上无法匹配

core.match在类上无法匹配
EN

Stack Overflow用户
提问于 2014-08-07 17:55:16
回答 1查看 274关注 0票数 4

在评估这个超级简单的core.match表达式时,我得到:

代码语言:javascript
复制
(match [(class "3.14")]
       [Integer] "Integer"
       [Double] "Doubler")
; => "Integer"

这怎么可能是正确的,我是不是遗漏了一些关于core.match的基本内容?在此表单上执行宏展开-1将给我以下信息:

代码语言:javascript
复制
=> (clojure.core/let [ocr-2751 (class "3.14")] (clojure.core/let [Integer ocr-2751] "Integer"))

任何指南针都会赏识。

EN

回答 1

Stack Overflow用户

发布于 2014-08-07 18:12:25

core.match允许您为match子句中的一个值指定一个名称,如下(从示例中)

代码语言:javascript
复制
(let [x 1 y 2]
  (match [x y]
    [1 b] b
    [a 2] a
    :else nil))

在这个例子中,如果第一个匹配值是一个,那么在用于生成结果的表达式中,第二个值将可以在名称b下访问。

由于match子句中的任何符号都被解释为将相应值绑定到该名称的指令,因此在您的示例中,名称Integer被绑定到值java.lang.String

代码语言:javascript
复制
user> (match [(class "3.14")]
             [Integer] Integer
             [Double] "Doubler")
java.lang.String

user> (match [(class "3.14")]
             [name-to-bind] name-to-bind
             [Double] "Doubler")
java.lang.String

文档中还不清楚是否有一种方法可以使用core.match来计算match子句,而不是绑定到它。可以通过与字符串进行匹配来解决这一问题,尽管它失去了一些优雅之处:

代码语言:javascript
复制
user> (match [(str (class (int 3)))]
             ["class java.lang.Integer"] "Integer"
             ["class java.lang.String"] "String"
             ["class java.lang.Double"] "Double")
"Integer"
user> (match [(str (class "3.14"))]
             ["class java.lang.Integer"] "Integer"
             ["class java.lang.String"] "String"
             ["class java.lang.Double"] "Double")
"String"
user> (match [(str (class 3.14))]
             ["class java.lang.Integer"] "Integer"
             ["class java.lang.String"] "String"
             ["class java.lang.Double"] "Double")
"Double"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25189031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档