java - Clojure 方法缺失

标签 java ruby clojure lisp

有人知道如何在 Clojure 中实现 method_missing(类似于 Ruby)吗? 例如

(defn method_missing [name & args]
     (foo name args))

如果使用得当,它将对 DSL 非常有用。

提前致谢!

最佳答案

在 Ruby 中,method_missing 是元编程的主要结构之一。它与 Ruby 的面向对象结构紧密结合,在“元类”的类中动态创建方法。这是可以做到的,因为在 Ruby 中类也是对象。

由于 Clojure 是一种函数式语言,因此模仿这种 Rubyism 意义不大。然而,Lisps(如 Clojure)的基本习语之一是代码就是数据:代码可以生成数据,它也可以生成代码。在 Lisp 中进行这种元编程的主要方法是宏。

我建议阅读更多有关宏及其注意事项的信息。请注意,就像在 Ruby 中一样,动态生成的代码通常更难调试和维护。通常巧妙地使用其他功能习语可以是更好的结构解决方案。

关于java - Clojure 方法缺失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7295016/

相关文章:

java - 事件调度线程从列表异常 SWING 中删除

clojure - 查询缓冲 core.async/chan 中的元素数量

ruby - 如何在 ruby​​ 中将全角整数字符解析为整数

scala - 生产级数据存储的功能语言实现

clojure - Noir uberjar 仅适用于构建目录

java - Spark Streaming 中状态函数的问题

java - 安卓Java。 invalidate(Rect) 的奇怪行为

java - 如何根据用户输入创建 JLabel 和 JRadioButton?

ruby - 错误 : undefined method `[]' for nil:NilClass

ruby - 如果 Windows 服务正在运行,我可以使用守卫来 Chef 吗?