这是动态语言运行时应该做的两件事之一:每个人都认为DLR仅适用于语言实现者,以使在CLI上更轻松地实现动态语言。但是,也使应用程序编写者更容易在其应用程序中托管动态语言。
在DLR之前,每种语言都有自己的托管API。现在,DLR具有标准化的托管规范,适用于
每种 语言,并且支持C#4和VB.NET 10中的动态类型对象,它比以往任何时候都更加容易:
// MethodMissingDemo.csusing System;using IronRuby;class Program{ static void Main() { var rubyEngine = Ruby.CreateEngine(); rubyEngine.ExecuteFile("method_missing_demo.rb"); dynamic globals = rubyEngine.Runtime.Globals; dynamic methodMissingDemo = globals.MethodMissingDemo.@new(); Console.WriteLine(methodMissingDemo.HelloDynamicWorld()); methodMissingDemo.print_all(args); }}# method_missing_demo.rbclass MethodMissingDemo def print_all(args) args.map {|arg| puts arg} end def method_missing(name, *args) name.to_s.gsub(/([[:lower:]d])([[:upper:]])/,'1 2') endend在这里,您会看到东西在各个可能的方向传播。C#代码正在Ruby对象上调用一个 甚至不存在的方法
,并且Ruby代码正在.NET数组上进行迭代并将其内容打印到控制台。



