We don't plan to make the highlighted code work. However we are going to make 
this work:

string s = engine.Execute<string>("'hi'")

and also this works:

string s = engine.Execute("'hi'").ToString(),

although in this case you need to take care of null.

The difference is that unlike Execute, Execute<T> invokes an explicit dynamic 
conversion on the resulting type. You can achieve the same using 
engine.ObjectOperations.ConvertTo<string>(engine.Execute("'hi'")).

Tomas

From: [email protected] 
[mailto:[email protected]] On Behalf Of Meinrad Recheis
Sent: Tuesday, March 03, 2009 2:19 PM
To: [email protected]
Subject: Re: [Ironruby-core] Comparing CLR strings and Ruby strings - a 
slightly surprising behaviour

On Tue, Mar 3, 2009 at 11:11 PM, Meinrad Recheis 
<[email protected]<mailto:[email protected]>> wrote:
On Tue, Mar 3, 2009 at 9:46 PM, Thibaut Barrère 
<[email protected]<mailto:[email protected]>> wrote:
Hi,

while writing specs for Magic, I noticed that:
instance_from(MenuItem, "Hello").text.to_s.should == "Hello"

to_s is required to get the assertion to pass. The following will return false:

button = Button.new
button.text = "Hello"
puts button.text == "Hello"

So I guess that CLR strings cannot be compared to Ruby strings unless to_s is 
applied.

I have stumbled on this too and was very surprised. This problem does not exist 
in IronPython (does it? please correct me if I am wrong). The behavior I was 
expecting is that "on the ruby" side all strings are (or at least behave 
exactly like) ruby strings, even if they come from .NET and are automatically 
converted to clr-strings when passed into clr methods.

In addition to that, it would also be great to have automatic type conversion 
on the .NET side too. I'd expect to be able to assign a string pulled out from 
the interpreter to a C# string without the need to call ToString(). For example,

string s = engine.Execute("'hi'") as string;

Currently s would be null because the dynamic cast to System.String fails.
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to