对元编程第一版第二章内容的一段代码进行了改写,但是出现了问题,代码如下:
class Ds
def get_mouse_info
puts "this is the mouse information"
end
def get_cpu_info
puts "this is the cpu information"
end
def get_keyboard_info
puts "this is the keyboard information"
end
end
class Computer
def initialize(data_source)
@data_source = data_source
data_source.methods.grep(/^get_(. )_info$/){ Computer.define_component $1 }
end
def self.define_component(name)
define_method(name){
puts "get the #{name} information in the computer"
}
end
# define_component :mouse
# define_component :cpu
# define_component :keyboard
end
cp = Computer.new(Ds.new)
cp.mouse
显示的是 undefined method mouse 错误,自己尝试了几次修改,但是没有发现错误原因,请帮忙指正,感谢。
问题解决:因为“.”是可以匹配任何“一个”字符,因此这里(.)不能匹配 mouse,因为 mouse 有五个字符,所有正确的做法是应该使用(.*)或者(.+)的方法匹配任意多的字符,其中前者表示重复 0 次及以上,后者表示重复 1 次及以上。