当前位置: 首页 > 知识库问答 >
问题:

我无法理解以下clojure.spec错误

步博厚
2023-03-14

我不明白为什么会出现下面的spec错误。

有人能告诉我为什么吗?

(ns spec-test 
   (:require [clojure.spec.alpha :as s]
             [clojure.spec.test.alpha :as stest]))

;;; spec definitions

(s/def :msds.fontspec/tag #{:fontspec})

(s/def ::id string?)
(s/def ::size int?)
(s/def ::family string?)
(s/def ::color string?)

(s/def :msds.fontspec/attrs 
  (s/keys :req-un [::id ::size ::family ::color]))

(s/def :msds.fontspec/content (s/cat))

(s/def ::fontspec
  (s/keys :req-un [:msds.fontspec/tag :msds.fontspec/attrs :msds.fontspec/content]))

(s/def ::fontspecs (s/* ::fontspec))


;;; spec application

(defn transform-fontspecs
  [fontspecs]
  (->> fontspecs
       (map (fn [{:keys [attrs] :as fontspec}]
              [(get attrs :id) (dissoc attrs :id)] ))
       (into {}) ))

(s/fdef transform-fontspecs
  :args (s/cat :fontspec ::fontspecs))

(stest/instrument `transform-fontspecs)


;;; test code

(def test-sample
  '({:tag :fontspec,
     :attrs {:id "283f1EV", :size 21, :family "c2S6", :color ""},
     :content ()}
    {:tag :fontspec,
     :attrs
     {:id "BzYMt4eEm", :size -5, :family "q0xhOE3", :color "bhV3PsVh"},
     :content ()}
    {:tag :fontspec,
     :attrs {:id "uA2i", :size -5, :family "HHGoD", :color "J47ZX935"},
     :content ()}))

(transform-fontspecs test-sample)

以下是错误说明。

2. Unhandled clojure.lang.Compiler$CompilerException
   Error compiling src/spec_test.clj at (55:1)
   #:clojure.error{:phase :compile-syntax-check,
                   :line 55,
                   :column 1,
                   :source "/home/philos/work/metapdf/src/spec_test.clj"}
             Compiler.java: 7648  clojure.lang.Compiler/load
                      REPL:    1  metapdf.core/eval19243
                      REPL:    1  metapdf.core/eval19243
             Compiler.java: 7177  clojure.lang.Compiler/eval
             Compiler.java: 7132  clojure.lang.Compiler/eval
                  core.clj: 3214  clojure.core/eval
                  core.clj: 3210  clojure.core/eval
                  main.clj:  437  clojure.main/repl/read-eval-print/fn
                  main.clj:  437  clojure.main/repl/read-eval-print
                  main.clj:  458  clojure.main/repl/fn
                  main.clj:  458  clojure.main/repl
                  main.clj:  368  clojure.main/repl
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   79  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:   55  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  142  nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                  AFn.java:   22  clojure.lang.AFn/run
               session.clj:  171  nrepl.middleware.session/session-exec/main-loop/fn
               session.clj:  170  nrepl.middleware.session/session-exec/main-loop
                  AFn.java:   22  clojure.lang.AFn/run
               Thread.java:  748  java.lang.Thread/run

1. Caused by clojure.lang.ExceptionInfo
   Spec assertion failed.

         Spec: #object[clojure.spec.alpha$regex_spec_impl$reify__2509 0x3660c4ee "clojure.spec.alpha$regex_spec_impl$reify__2509@3660c4ee"]
        Value: (({:tag :fontspec,
                  :attrs {:id "283f1EV", :size 21, :family "c2S6", :color ""},
                  :content ()}
                 {:tag :fontspec,
                  :attrs
                  {:id "BzYMt4eEm", :size -5, :family "q0xhOE3", :color "bhV3PsVh"},
                  :content ()}
                 {:tag :fontspec,
                  :attrs {:id "uA2i", :size -5, :family "HHGoD", :color "J47ZX935"},
                  :content ()}))

     Problems: 

            val: ({:tag :fontspec,
                   :attrs {:id "283f1EV", :size 21, :family "c2S6", :color ""},
                   :content ()}
                  {:tag :fontspec,
                   :attrs
                   {:id "BzYMt4eEm", :size -5, :family "q0xhOE3", :color "bhV3PsVh"},
                   :content ()}
                  {:tag :fontspec,
                   :attrs {:id "uA2i", :size -5, :family "HHGoD", :color "J47ZX935"},
                   :content ()})
             in: [0]
         failed: map?
           spec: :spec-test/fontspec

                 alpha.clj:  132  clojure.spec.test.alpha/spec-checking-fn/conform!
                 alpha.clj:  140  clojure.spec.test.alpha/spec-checking-fn/fn
               RestFn.java:  408  clojure.lang.RestFn/invoke
             spec_test.clj:   55  spec-test/eval19293
             spec_test.clj:   55  spec-test/eval19293
             Compiler.java: 7177  clojure.lang.Compiler/eval
             Compiler.java: 7636  clojure.lang.Compiler/load
                      REPL:    1  metapdf.core/eval19243
                      REPL:    1  metapdf.core/eval19243
             Compiler.java: 7177  clojure.lang.Compiler/eval
             Compiler.java: 7132  clojure.lang.Compiler/eval
                  core.clj: 3214  clojure.core/eval
                  core.clj: 3210  clojure.core/eval
                  main.clj:  437  clojure.main/repl/read-eval-print/fn
                  main.clj:  437  clojure.main/repl/read-eval-print
                  main.clj:  458  clojure.main/repl/fn
                  main.clj:  458  clojure.main/repl
                  main.clj:  368  clojure.main/repl
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   79  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:   55  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  142  nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                  AFn.java:   22  clojure.lang.AFn/run
               session.clj:  171  nrepl.middleware.session/session-exec/main-loop/fn
               session.clj:  170  nrepl.middleware.session/session-exec/main-loop
                  AFn.java:   22  clojure.lang.AFn/run
       .lang.Thread/run

共有1个答案

姬安志
2023-03-14

您应该检查problems部分,其中显示valfailed:map?。问题是,您使用的regex操作像s/*,当嵌套时,它会将结构扁平化,因此它需要的是一个映射而不是一个集合。您应该在这里只使用coll-of,imho。请参阅https://clojure.org/guides/spec#_collections。:msds.fontspec/content规范可能应该更新为不使用cat而只使用vector?或类似的东西。

 类似资料:
  • 问题内容: 我在运行Android单元测试时遇到问题。尝试运行简单测试时遇到此错误。 这是日志: Blockquote java.lang.RuntimeException:无法解析以下活动:Intent {act = android.intent.action.MAIN flg = 0x10000000 cmp = com.wsandroid.Activities / .SplashActivi

  • 我想根据参考书向systemd注册服务。但是,如果您输入, 你会得到一个错误。我解决不了。 无法启动apasn。服务:单位apasn。服务未正确加载:参数无效。请参阅系统日志和“systemctl status apasn”。详情请咨询服务部。

  • 这是logcat。我需要澄清这个错误,请社区 我做了更改,但我再次得到这个错误??

  • 问题内容: 对于没有JS经验的人,您对学习Node.js有什么建议? 我在论坛上阅读了很多有关事件驱动,非阻塞,异步,回调等内容的信息,但我不知道那是什么! 在哪里可以学习基础知识,以便理解所有术语以及将来的node.js? 谢谢! 问题答案: 您提到的概念(事件驱动,非阻塞,异步,回调)不是特定于JavaScript的,在更一般的上下文中理解它们非常有价值。它们都围绕着优雅地处理我们无法控制的资

  • 现在我正在尝试从git运行克隆应用程序https://github.com/frinder/frinder-app但问题是该应用程序制作了很长时间,所以应该改变bulid.gradle 但是当我尝试相同的同步实现“com.android.支持:动画矢量可绘制:28.0.0”,但如果我删除它,请继续向我显示错误28.0.0它显示如下 但我不知道是什么造成了不完全相同的版本 这是应用程序build.g

  • 我在Android Studio中使用Firebase工具将Firebase消息传递添加到我的应用程序中,我在我的应用程序中遇到了一个问题(添加Firebase消息传递之前没有错误)。我在App Level gradle中的当前设置: 我已使用项目结构菜单将所有依赖项更新为最新版本。在我写这个问题时,firebase messaging的最新版本是20.0.0,适用于所以问题不在于更新到最新版本。