How do I fix error: RuntimeException Unmatched delimiter: )

How do I fix error: RuntimeException Unmatched delimiter: )

问题是如果我用 08 或 09 传递这个函数(在我的 REPL 中),它会给我一个错误。

我已经尝试删除周围的括号以查看错误是否会消失。

(defn format-pump-number [number]
  (if (.contains (str number) "0")
    (str number)
    (str "0" number))
    (if (> number 9)
      (if (< number 100)
        (str number)
        (throw (Exception. "Dispenser number can only be 2 characters!"))))
      (str "0" number))

我希望 [number] 在传递该确切数字时返回 08 或 09。

计算机通常将 0809 之类的数字解释为八进制,这是一个错误,因为八进制数字只能从 0..7 开始。从历史上看,人们认为使用前导零字符 0 是一种聪明的代码类型,因为字符 0 看起来像单词 Octal 中的字符 O。 因此,当编译器看到一个以 0 开头的整数时,它被解释为 "The digits coming next should be interpreted in base-8, not base-10"。示例:

 12  =>  twelve (parsed using base-ten)
012  =>  ten    (parsed using base-eight)

正如您所发现的,这种过于聪明的尝试导致了今天的问题。

所以,这根本不是你的功能,只是一个糟糕的错误信息。观察:

(println "val=" 8) => `val= 8`

但是

(println "val=" 08)
  => Error refreshing environment: Syntax error reading source at (tst/demo/core.clj:19:20).

我没有收到有关 "Unmatched delimiter" 的错误消息,所以我不确定这是怎么发生的。