IronRuby为什么酷(1)

动态语言一般都有个特性,就是在运行时修改一个类的行为或一个类实例的,而期间源代码并没有改动。这个特性在ruby语言里叫Monkey Pathing。其实这就像是C#里的扩展方法一样,只不过远远比它强大。

假设我们有一个C#的对象实例,它有一个索引器,在C#里我们可以这样访问:

object someValue = indexer["key"]

而IL里无非是给索引器一个get_Item()方法。当我们把这个对象传递到IronRuby的时候,我就需要这样了:

someValue = $indexer.get_Item("key");

这样其实并不是太好,ruby要的方式是:

someValue = $indexerObject.key

这时候missing_method方法就可以来帮忙了:

def $indexer.method_missing(methodname);
 
$indexer.get_Item(methodname.to_s)
end
 
一个例子:
class SimpleCallLogger
 
def initialize(o)
   
@obj = o
 
end
 
def method_missing(methodname, *args)
   
puts "called: #{methodname}(#{args})"
   
a = @obj.send(methodname, *args)

   
puts "\t-> returned: #{a}"
   
return a

 
end
end

点到为止,有兴趣的朋友咱们email讨论: fanweixiao$$$$$gmail%%%%%%com

相关连接:

monkey patch
ruby的method_missing
monkey patching clr objects

posted @ 2008-04-22 01:01  new 维生素C.net()  阅读(458)  评论(0编辑  收藏  举报