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/.