Below you will find pages that utilize the taxonomy term “clojure 元编程”
Posts
Clojure method missing 迷思
Clojure 的元编程是基于宏(Macro)来实现的。宏很强大,但是有些场合,我偶尔会怀念 Ruby 的 Method missing。
什么是 Method missing? 什么是 Method missing?看一个简单的例子,Ruby 的 Hash 访问是通过 [] 运算符:
> h={a: 1, b: 2} => {:a=>1, :b=>2} > h[:a] => 1 > h[:b] => 2 但是这种代码写多了也烦,我想用 dot 语法,也就是 h.a 来访问,可能更方便一点,这时候祭出 open class + method missing 就可以了:
class ::Hash def method_missing(name, *args) return self[name.to_sym] if key? name.to_sym super(name, *args) end end 我们给标准库的 Hash 类添加了 method_missing 方法,它会『兜底』所有 Hash 没有实现的方法,将方法名和参数传递给 method_missing,我们在上面的例子里将方法名转为 symbol,然后判断这个 symbol 在 hash 里是否存在,如果存在,返回它对应的值,否则调用原始的 super.