Hi and goodevening, hope someone can help
i am trying to get some sort of scripting support going. I have the
following code, which executes a ruby method and return the result.
However, it is returning a method not found error from IronRuby itself
some code ommited but it''s based on the standard example. (I did make
reference to all the dlls IronRuby and IronRuby.Libraries)
var engine = IronRuby.Ruby.CreateEngine();
returnvalue = engine.Operations.InvokeMember(instance, method,
arg).ToString();
I am running the following ruby code as a test...
class Plotlight
def get_message(a)
res = "Hello- from Ruby " << a
res
end
def swapcase(a)
res = a.downcase
res
end
end
Now, when running the method get_message("something") things work
great
however when running something that has a reference to the standard
library (swapcase in this example) it will return the error
$exception {"undefined method `downcase'' for
fooBAR:ClrString"}
System.Exception {System.MissingMethodException}
running the code through ir.exe works without any problems
Do I need to make a call/reference to the library? and if I do, how do I
do that?
Hope someone can help! Thank you very much.
Kind regards, Marco
--
Posted via http://www.ruby-forum.com/.
A CLR string is not the same as a ruby string. Calling .to_s before downcase
should work or you can monkey patch System::String and add the method
downcase to the clr string class if it bothers you too much
class System::String
def downcase
self.to_s.downcase
end
end
On Wed, Mar 18, 2009 at 11:10 PM, Marco Kotrotsos <lists at
ruby-forum.com>wrote:
>
>
> Hi and goodevening, hope someone can help
>
> i am trying to get some sort of scripting support going. I have the
> following code, which executes a ruby method and return the result.
> However, it is returning a method not found error from IronRuby itself
>
> some code ommited but it''s based on the standard example. (I did
make
> reference to all the dlls IronRuby and IronRuby.Libraries)
>
> var engine = IronRuby.Ruby.CreateEngine();
> returnvalue = engine.Operations.InvokeMember(instance, method,
> arg).ToString();
>
>
>
> I am running the following ruby code as a test...
>
> class Plotlight
> def get_message(a)
> res = "Hello- from Ruby " << a
> res
> end
>
> def swapcase(a)
> res = a.downcase
> res
> end
> end
>
> Now, when running the method get_message("something") things work
great
> however when running something that has a reference to the standard
> library (swapcase in this example) it will return the error
>
> $exception {"undefined method `downcase'' for
fooBAR:ClrString"}
> System.Exception {System.MissingMethodException}
>
> running the code through ir.exe works without any problems
>
> Do I need to make a call/reference to the library? and if I do, how do I
> do that?
>
> Hope someone can help! Thank you very much.
>
> Kind regards, Marco
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core at rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/ironruby-core/attachments/20090318/029c88f6/attachment.html>
Thank you Ivan, that has been most helpful! Marco Ivan Porto carrero wrote:> A CLR string is not the same as a ruby string. Calling .to_s before > downcase > should work or you can monkey patch System::String and add the method > downcase to the clr string class if it bothers you too much > > > class System::String > > def downcase > self.to_s.downcase > end > > end-- Posted via http://www.ruby-forum.com/.
i''m sorry, another one popped up and I hope you can help me with it
it''s with this example
class Plotlight
def fib n
if n<2
n
else
res = fib(n-2)+fib(n-1)
end
end
end
when executing, I get Object must be of type String. I suspect this to
be because I am feeding it a String argument. When I do this
class Plotlight
def fib arg
n = arg.to_i
if n<2
n
else
res = fib(n-2)+fib(n-1)
end
end
end
it now says
+ $exception {"undefined method `to_i'' for 12:ClrString"}
System.Exception {System.MissingMethodException}
so it again must be because it''s not an expected Integer...but how do I
work around this one? I am trying to understand how this works.
Thanks
Marco
Marco Kotrotsos wrote:> Thank you Ivan, that has been most helpful!
>
> Marco
>
>
> Ivan Porto carrero wrote:
>> A CLR string is not the same as a ruby string. Calling .to_s before
>> downcase
>> should work or you can monkey patch System::String and add the method
>> downcase to the clr string class if it bothers you too much
>>
>>
>> class System::String
>>
>> def downcase
>> self.to_s.downcase
>> end
>>
>> end
--
Posted via http://www.ruby-forum.com/.
ugh (slap head) it was n = arg.to_s.to_i so nasty...:) Marco Marco Kotrotsos wrote:> i''m sorry, another one popped up and I hope you can help me with it > > it''s with this example > > class Plotlight > def fib n > if n<2 > n > else > res = fib(n-2)+fib(n-1) > end > end > end > > > when executing, I get Object must be of type String. I suspect this to > be because I am feeding it a String argument. When I do this > > class Plotlight > def fib arg > n = arg.to_i > if n<2 > n > else > res = fib(n-2)+fib(n-1) > end > end > end > > it now says > > + $exception {"undefined method `to_i'' for 12:ClrString"} > System.Exception {System.MissingMethodException} > > > so it again must be because it''s not an expected Integer...but how do I > work around this one? I am trying to understand how this works. > > Thanks > Marco > > >-- Posted via http://www.ruby-forum.com/.
Out of curiosity, why are you passing a string to this method through the hosting interface instead of just passing an int? What does the calling code look like? -----Original Message----- From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Marco Kotrotsos Sent: Thursday, March 19, 2009 9:40 AM To: ironruby-core at rubyforge.org Subject: Re: [Ironruby-core] undefined Method ''downcase'' ugh (slap head) it was n = arg.to_s.to_i so nasty...:) Marco Marco Kotrotsos wrote:> i''m sorry, another one popped up and I hope you can help me with it > > it''s with this example > > class Plotlight > def fib n > if n<2 > n > else > res = fib(n-2)+fib(n-1) > end > end > end > > > when executing, I get Object must be of type String. I suspect this to > be because I am feeding it a String argument. When I do this > > class Plotlight > def fib arg > n = arg.to_i > if n<2 > n > else > res = fib(n-2)+fib(n-1) > end > end > end > > it now says > > + $exception {"undefined method `to_i'' for 12:ClrString"} > System.Exception {System.MissingMethodException} > > > so it again must be because it''s not an expected Integer...but how do I > work around this one? I am trying to understand how this works. > > Thanks > Marco > > >-- Posted via http://www.ruby-forum.com/. _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core
returnvalue = engine.Operations.InvokeMember(instance, method, arg).ToString(); whereas arg is always String at the moment. (will change somewhere in the future) I can probably do a type check on arg... Marco Curt Hagenlocher wrote:> Out of curiosity, why are you passing a string to this method through > the hosting interface instead of just passing an int? What does the > calling code look like?-- Posted via http://www.ruby-forum.com/.