(defun test:case (INPUT)
(case (quote INPUT)
("a" (message "bar"))
(otherwise (message "foo"))
))
(test:case "a")
Run Code Online (Sandbox Code Playgroud)
我希望得到一个案例结构,将"a"与INPUT和调用进行比较(message "foo").我不能让上面的代码调用任何东西,但(message "foo").
我一定做错了什么 ?
如果您有Emacs 24,pcase也适用于比较字符串,并且可能比长cond表达式更具可读性.
(defun test-case (input)
(message
(pcase input
("a" "bar")
("b" "baz")
("c" "quux")
(_ "foo"))))
Run Code Online (Sandbox Code Playgroud)
匹配规则pcase比caseML或Haskell中的模式匹配更复杂但也更通用和灵活.
您可能想cond在这种情况下使用。compare caseusing eqlwhich 将比较实际对象。在这种情况下,它们将是两个不同的字符串,因此它始终评估otherwise子句。
使用 cond 您可以指定要使用的相等运算符,例如:
(defun test:case (INPUT)
(cond
((equal INPUT "a") (message "bar"))
(t (message "foo"))))
(test:case "a")
Run Code Online (Sandbox Code Playgroud)
查看可用的elisp 相等谓词及其行为方式。
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |