[Ironruby-core] Comparing CLR strings and Ruby strings - a slightly surprising behaviour

Meinrad Recheis meinrad.recheis at gmail.com
Tue Mar 3 17:19:07 EST 2009


On Tue, Mar 3, 2009 at 11:11 PM, Meinrad Recheis
<meinrad.recheis at gmail.com>wrote:

> On Tue, Mar 3, 2009 at 9:46 PM, Thibaut Barrère <thibaut.barrere at gmail.com
> > 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090303/7a00c06c/attachment-0001.html>


More information about the Ironruby-core mailing list