【发布时间】:2012-12-07 09:04:05
【问题描述】:
在下面的代码中,方法roar 没有在类Lion 中定义,但仍然可以使用method_missing 调用。
class Lion
def method_missing(name, *args)
puts "Lion will #{name}: #{args[0]}"
end
end
lion = Lion.new
lion.roar("ROAR!!!") # => Lion will roar: ROAR!!!
method_missing应该在哪些情况下以及如何使用?使用起来安全吗?
【问题讨论】:
-
Ghost 方法,我猜通常是元编程工具。注意效率。 Ghost方法很慢。
-
我认为您的意思是
class Lion而不是Class Lion。 -
@EricWalker:谢谢,输入错误。
-
@EricWalker -- 真的吗,伙计?
-
@DylanRichards 是的,必须使用小写的
class。在 Ruby 中,class是类似if或def的关键字,而Class是类的名称。Class Lion将产生NameError: uninitialized constant Lion。
标签: ruby metaprogramming