def method_missing(name, *args)
super if !respond_to?(name)
puts ">>> #{name}, args: #{args}, args class: #{args.class} and size: #{args.size}"
args.each do |pc_id|
info = @data_source.send "get_#{name}_info", pc_id
price = @data_source.send "get_#{name}_price", pc_id
result = "#{name.capitalize}: #{info}, ($#{price})"
return result = "Pc#{pc} : * #{result}" if price > 1000
result
end
end
测试代码
require File.dirname(__FILE__) + '/Datasource'
require File.dirname(__FILE__) + '/Computer'
ds = Datasource.new
cmp = Computer.new(ds)
puts cmp.cpu 10001
puts cmp.cpu 10001,10002
输出
[root@mysql-test-woody ruby]# ruby main.rb
>>> cpu, args: [10001], args class: Array and size: 1
Pc10001 : * Cpu: i7, ($1700)
>>> cpu, args: [10001, 10002], args class: Array and size: 2
Pc10001 : * Cpu: i7, ($1700)
我是看《Ruby 元编程》中的第二天的例子来做的 自己试着做了一个 Datasource 的类 貌似能用 动态分发的例子已经做完了 我在 GhostMethod 中 加了一些想法进去 比如 Pc 的 ID 是可以作为参数 直接赋值 甚至可以多赋值几个 循环查询并显出出来
现在处理 method_missing 的时候 貌似没有循环
我 Code 放在 Github上了 有 2 个 Branch 出问题的这个在第二个 但 Datasource 的类 都是一样的