有人知道如何在 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/