欢迎!有关如何使用本站的信息,请参阅关于页面。
要获得例如 Enums 的恒定时间分派,即使用户知道 case,这也相当隐蔽。
应该通过 包装宏,将 case 分派到任意常数,应该被记录。
case 被记录为接受所有可读形式作为测试常量。然而,通过将其包装在另一个宏中,它可以设置为使用任何编译时已知常量作为测试常量。
有时这是合适的,例如,当在 java Enum 上分派时。其他时候则不那么合适,例如,当在虚拟机重启时哈希值发生变化的对象上分派时(破坏 AOT)。
这项技术是一种更通用技术的应用:将非文字传递给另一个宏。是否有其他宏也有类似的用例?
https://groups.google.com/d/topic/clojure/3yGjDO2YnjQ/discussion
由 bendlas 发布的评论:
- 这是一个重复的 - http://dev.clojure.org/jira/browse/CLJ-1367
实际上,这是一个替代方案
由 petrglad 发布的评论:
也许这个门票和 CLJ-1367 拖得太久,因为已经有一个 'condp' 可以像这样使用:
(condp = test-value JavaClass/CONST1 result1 JavaClass/CONST2 result2)
这是顺序的并且较慢,但与 plain case 相差不多。
但是,如果这是一个要替换 plain 'case' 的形式,则此应通过文献建议。