集的方法可以以两种形式在 IronRuby 中表示:熟悉的 ruby 小写形式(例如 controls.add)和传统的 C#驼峰形式(例如 ToString) 。由于 Ruby 并没有大多数.NET 语言中 的属性概念 (CLR 中是字段)所以在 IronRuby 中属性是以访问方法和存取方法 , (例如 foo.bar() 和 foo.bar=(x))的形式存在。假设我们将以下 C#命名空间和 Person 类编译成了一个 MyClassLibrary.dll 文件: namespace MyClassLibrary { public class Person { public string Name { get; set; } public string Introduce() { return String.Format("Hi, I'm {0}", Name); } } } 下面将会
演示如何在 IronRuby 中使用这个 dll。 require 'MyClassLibrary.dll' me = MyClassLibrary::Person.new me # => MyClassLibrary.Person me.name = "Edd" me.name #=> 'Edd' me.introduce # => 'Hi, I'm Edd' 这种纯正的互动能力能够帮助开发者在一些元
程序设计场合复用 Ruby 代码。
注意:注意大小写!如果你希望在 IronRuby 中使用你自己的.NET 程序集,请保证你的.NET 代码中的命名空间和类名使用的是正确的大写驼峰表示法。.NET 类可以直接转换成 Ruby 类,而命名空间是以 Ruby 模块的形式表示,在 Ruby 中两者都会使用大写驼峰表示法。如 果你的.NET 代码中的名字不是使用的这种表示法,那么就无法将两者联系起来,从而不能 在 Ruby 代码中使用。 IronRuby 元编程 元编程(Metaprogramming)的科学和艺术可以写一篇很长的文章,尤其是在 Ruby 中,我 们可以充分享受到元编程的乐趣。就像你希望的那样,在 IronRuby 中,你也可以尽情地发 挥自己的想象力,使用一切可以在动态语言中能够使用的东西。让我们看看如何在 Ruby 使 用可信赖的 class_eval 来处理之前例子的 Person 类的: require 'MyClassLibrary.dll' me = MyClassLibrary::Pe
rson.new me.name = "Edd" MyClassLibrary::Person.class_eval do define_method(:shout) do |text| "#{name} shouts: #{text.upcase}!" end end puts me.shout("Hello, world") #=> "Edd shouts: HELLO, WORLD!" 如之前例子所示,ir(IronRuby 解释器)将会执行这段代码。如果你希望能够有更多证据证 明 IronRuby 是一种“只有想不到,没有做不到”的语言,那么我们使用典型的 Rails-esque 作为 mixin。请记住我们在这里一直使用的是使用 C#编写的类。 require 'MyClassLibrary.dll' me = MyClassLibrary::Person.new module ActsAsHungry def self.included(base) puts "I'm hungry..." end def tummy_contents @tummy_contents ||= [] end def eat(foodstuff) tummy_contents << foodstuff puts "*Burp*" end end
MyClassLibrary::Person.class_eval do include ActsAsHungry end me.eat("cheeseburger") 如何驾驭 irails? 让我们回到正题。我敢打赌大部分的 Ruby 开发者都熟悉 Rails 框架,也许假设大多数都是 被 Rails 吸引才会使用 Ruby 语言应该会更好些。 长话短说,IronRuby 的兼容性非常优秀,你可以完美地运行你的 Rails 程序。但是,有些事 情我不得不交代一下, 否则含糊不清的语句可能会让开发者一头雾水, 这是与我的初衷相违 背的。我知道,当了解这些知识后,也许你会想立刻在你的 Ruby 应用中大量尝试这些.NET 互动功能,所以我要声明,这里有些事项需要引起你的注意: IronRuby 有自己的用于替代 irb、 gem、 rake 和 rails 的脚本, 叫做 iirb、 igen、 irake 和 irails。 如果你需要安装官方 Ruby 的话,你可能需要记住这些来分辨它们。 不过 IronRuby 官网声明,这些脚本将会被废弃掉,你可以通过-S
标识来调 用 ir。 由于它和其他的 Ruby 安装程序是隔离的,IronRuby 不会和它们共享 RubyGems(也可 以通过调用 igem 列表反映出来) ,尽管它其实也可以实现。 SQLite 迅速成为了开发中最受欢迎的数据库。在 IronRuby 下,sqlite3-ruby 不能正常工