此代码有效:
(case '-
+ :plus
- :minus
:unknown)
==> :minus
这也是:
(case '-
+ :plus
'- :minus
* :times
:unknown)
==> :minus
这不是:
(case '-
'+ :plus
'- :minus
* :times
:unknown)
==> java.lang.IllegalArgumentException: Duplicate case test constant: quote
Google搜索此错误会导致log file here。然而,这家伙刚刚说它删除了引号。
看起来case语句将不同的符号视为相同的值。为什么会这样?
TIA。
答案 0 :(得分:5)
来自case
文档:
Each clause can take the form of either:
test-constant result-expr
(test-constant1 ... test-constantN) result-expr
'-
扩展为(quote -)
。
因此,带引号的条款扩展为:
(quote -) :minus
(quote +) :plus
正如您所看到的,符号“quote”显示为实际测试常量,当您引用+和 - 时,它会出现两次。
评估实际符号case
上的quote
可能会澄清事情:
user=> (case 'quote '+ :plus - :minus :unknown)
:plus
user=> (case 'foo (foo +) :plus - :minus :unknown)
:plus