Electronic Joint Business

Solution for E-Business

dlr

Ironruby与CLR语言的互操作性 (二)

引用 .NET 的 Assembly
除了我们前面提到的 require <PartialName> 和 require <Strongname> 外,Ironruby 1.0发布的时候,还提供了一个新的函数 load_assembly,这个函数的参数为 Assembly 的名称,在内部,load_assembly 会先调用 Assembly.Load,如果找不到这个 Assembly,那就再调用 Assembly.LoadWithPartialName。它也支持 require 的两种调用方法。除此之外,load_assembly 还可以接受第二个参数,指明只引用该 Assembly 下的某个名称空间,比如:

load_assembly ‘IronRuby.Libraries’, ‘IronRuby.StandardLibrary.StringIO’

名称空间
当装配件被加载之后,它的顶层名称空间和类在 ironruby 内是可见的。比如下面这个例子

namespace Models {  
  public class Person {  
    private string name;  
    public Person(string name) {  
      this.name = name;  
    }  
    public string Name {    
      get {  
        return name;  
      }  
    }  
  }

上面C#代码的名称空间“Models”与普通的ruby模块一样可被存取:

>>> require ‘models’  
=> true  
>>> Models  
=> Models  
>>> Models.class  
=> Module

需要注意几点:

  • 1.不可用小写的名称空间:Ruby 常量要求使用大写开头的名字,所以名称空间必须遵循 Ironruby 的要求。
  • 2.不可用“空”的名称空间: 对 IronRuby 来说,名称空间不能为空。而且由于 CLR 的名称空间只在有可访问的子类时才存在,因此假如名称空间的所有子类都是私有的,IronRuby 将无法访问该名称空间。所以名称空间内至少要有一个公共的可访问类。

因为名称空间被视为 Ironruby 的普通模块,所以它和其他 ruby 模块一样,可以被 mixin.

>>> 阅读全文

 

, , , , ,

Ironruby与CLR语言的互操作 (一)

ironruby 是 .Net 平台下的一个 ruby 实现,众所周知,ruby 吸取了 Perl,python 等脚本语言的灵活性,带有实体对象模型,是一门动态/解释语言。从进入 ironruby 0.9.1 之后,ironruby 日趋稳定,之后发布的 Ironruby 1.0,兼容于 ruby 1.8.6,1.1 版本则增加了了对 .NET 扩展方法的支持,可以完美的运行 LINQ,目前开发中的 Ironruby 1.1.1 则是第一个兼容 ruby 1.9.2 的版本。

由于 IronRuby 是基于 .NET DLR,因此你可以在 IronRuby 中调用任何已有的 .NET 代码。这意味着可以在 IrongRuby 中使用任何框架,比如 Windows Forms、WPF 或者 GTK(#),因为.NET 和 Mono(分)拥有对这些框架的 CLI 绑定。Mono 甚至有一个使用GTK 实现的 Windows Forms,这样应用程序无须修改就可以运行在两个实现上。

Ironruby与CLR语言的互操作
IronRuby 带来的改变:
1. 与静态语言的互操作:IronRuby 与 .NET 框架集成的非常紧密,在 IronRuby 中调用 C#/VB 代码不会感觉是在使用“互操作”。C# 也可以通过 DLR Hosting API 调用 IronRuby 代码。而在 .NET 4.0 中,动态方法分配已经成为了 C# 的一部分,因此在 C# 中调用 IronRuby 代码和调用 C# 方法差不多。由于 IronRuby 基于 DLR,因此也可以方便的与其它 DLR 语言进行交互,如今 Python 和 Ruby 可以很好的合作,未来的 DLR 语言也一样可以。

2. 更稳定且丰富的支持,你可以抛弃 rubyforge 上许多质量不高的无人维护的 gems,改用 .Net 自身丰富的资源,你可以放弃ruby 中频繁变更的 win32api,而使用 .net 的 p/invoke,你可以放弃无人维护的 fireruby,而简单用 .net firebird provider 为自己添加 firebird 的 activerecord 支持而不用再担心找不到数据库的 activerecord 支持。

3. 为 .Net 带来 Rails,基于 Ironruby 0.9.2 你只需要对 rails 2.3.4 做一些小小的修改,就可以在 CLR/DLR 上运行最新的Rails,同时使用 Ironruby 也可以为.Net 的 MVC 框架带了许多新的变化,这些在后面会详述。

>>> 阅读全文

 

, , , , , , ,