- method_missing,顾名思义,在方法找不到时被调用。有了这个强大元编程工具,我们就能创建动态的方法,比如ActiveRecord中的动态finder
class Legislator
# Pretend this is a real implementation
def find(conditions = {})
end
# Define on self, since it's a class method
def self.method_missing(method_sym, *arguments, &block)
# the first argument is a Symbol, so you need to_s it if you want to pattern match
if method_sym.to_s =~ /^find_by_(.*)$/
find($1.to_sym => arguments.first)
else
super
end
end
end
-
send,也是一个动态方法调用的强大工具,它的作用的将一个方法以参数的形式传递给对象。
```
class Box
def open_1
puts “open box”
enddef open_2
puts “open lock and open box”
enddef open_3
puts “It’s a open box”
enddef open_4
puts “I can’t open box”
enddef open_5
puts “Oh shit box!”
end
end
box = Box.new
box.send(“open_#{num}”)
```
近期评论