当前位置: 首页 > 工具软件 > IronRuby > 使用案例 >

IronRuby为什么酷(1)

冯卓
2023-12-01

动态语言一般都有个特性,就是在运行时修改一个类的行为或一个类实例的,而期间源代码并没有改动。这个特性在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

转载于:https://www.cnblogs.com/fanweixiao/archive/2008/04/22/1164800.html

 类似资料: