Az IronRuby programozási nyelv

Metódusok

"out" parameter

Azon CLR metódusok, amelyek rendelkeznek "out" parameterrel, azok meghívhatók az "out" paraméter nélkül is IronRuby-ban. Ekkor az "out" paramétert egy tömben adja vissza a metódus. C# metódus, out paraméterrel:

public string Foo(int i, out int j, out int k);
Ennek használata IronRuby-ban:
return_value, j, k = Foo(5)

to_clr_type

"to_clr_type" segítségével kaphatjuk meg az aktuális konstans CLR típus objektumát, ha ez konstans egy CLR typust reprezentál:

>>> System::String.class => Class
A .Net-ben a String típusa System.RuntimeType lenne, de a Ruby azt mondja, hogy osztály típusú, mert egy Ruby osztályhoz van "mappelve". Ahhoz, hogy megkapjuk a tényleges CLR típusát, a "to_clr_type" függvényt kell használni:
>>> System::String.to_clr_type.class => System::RuntimeType

clr_member

"clr_member" segítségével japhatjuk meg az aktuálisan használt .NET típus tagjait (tulajdonságok, mezők, függvények). Amikor a System::String.method(:Replace) metódust akarjuk használni, akkor a hívott metódus a Ruby String osztályának Replace metódusát fogja meghívni. Habár nem lehetünk benne biztosak, hogy System::String Replace függvénye nem e lett felülírva a Ruby String osztályában. A "clr_member" fogja biztosítani számunkra, hogy a CLR típus (itt a String) függvénye legyen meghívva.

>>> class System::String ... def Replace(a, b) ... raise "BOOM" ... end ... end => nil >>> System::String.new("a").method(:Replace).call("a", "b") :2:in `Replace': BOOM (RuntimeError) from :0 >>> System::String.new("a").clr_member(:Replace).call("a", "b") => 'b'

clr_ctor

"clr_ctor" segítségével a CLR típus konstruktorát kapjuk meg. Van néhány CLR típus, amely közvetleneül a neki megfelelő Ruby osztálynak van megfeleltetve( például: System.Threading.Thread a Thread osztályhoz):

>>> System::Threading::Thread.new :0:in `start': must be called with a block (ThreadError) from :0
Mivel az osztály közvetlenül a neki megfelelő Ruby osztálra van mappelve, ezért a Ruby Thread konstruktora lett meghívva, ez okozta a problémát. "System::Threading::Thread.clr_ctor" segítségével tudjuk meghívni közvetlenül a CLR-beli konstruktort.

to_clr_string

"to_clr_string" egy kényelmi funkció a String osztályban, amely így néz ki:

class String def to_clr_string System::String.new(self) end end
Erre azért van szükség, mivel a Ruby String változékony("mutable"), míg a CLR String változtathatatlan ("immutable"), ezért a kettő nem megfeleltethető egymásnak. Ettől függetlenül bármilyen változtathatalan("immutable") függvény meghívható a CLR string típusán, de azok más típusuak lesznek. Ezért célszerű használni a "to_clr_string" metódust!