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。
计算机通常将 08
或 09
之类的数字解释为八进制,这是一个错误,因为八进制数字只能从 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" 的错误消息,所以我不确定这是怎么发生的。
问题是如果我用 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。
计算机通常将 08
或 09
之类的数字解释为八进制,这是一个错误,因为八进制数字只能从 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" 的错误消息,所以我不确定这是怎么发生的。