That wouldn't work (you'll get an exception). You need to define "new" instead:

class RubyClass < ClrClass
  def self.new (param1)
    super
  end
end

CLR and Ruby use different allocation schema. CLR creates objects atomically 
while Ruby creates an empty/uninitialized object and then calls initialize. You 
can't use Ruby's way on CLR objects that don't allow empty object allocation 
(don't have default constructors).

Tomas

From: ironruby-core-boun...@rubyforge.org 
[mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Orion Edwards
Sent: Monday, May 11, 2009 10:43 PM
To: ironruby-core@rubyforge.org
Subject: Re: [Ironruby-core] Code Review: New


On 12/05/2009, at 1:49 PM, Tomas Matousek wrote:

Several cases need to be distinguished in Class#new:
1)      The class defines or inherits an initializer ("initialize" method) that 
is not the default Object#initializer.
a.       The initializer is a Ruby method (written in Ruby).
=> Use a default constructor to create the instance and invoke the initializer 
on it. If the class derives from CLR class with no default constructor an 
exception is thrown.

I may be missing other context, but what happens if I want to do this:

public class ClrClass
{
  public ClrClass(string param1) { ... }
  // no other constructors
}

class RubyClass < ClrClass
  def initialize(param1)
    super(param1) # or just super should also pass the param1 if my memory is 
correct...
  end
end

?????
_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to