[Python-ideas] [Wild Idea] Static Ducks

Michael Foord fuzzyman at gmail.com
Thu Sep 24 12:12:12 CEST 2009


2009/9/22 Masklinn <masklinn at masklinn.net>

> On 22 Sep 2009, at 22:37 , Michael Foord wrote:
>
>>
>> C# will not allow you to add strings to numbers, this is nonsense.
>>
> I fear you're wrong. In C#, the operation `"foo " + 3` is perfectly
> legal and returns `"foo 3"` (and the integer can, of course, be the
> left hand of the operator). No need for a ToString, that's implicit.
>
>
Heh, you're right. How very odd.

Michael


> In fact, this is quite clearly specified in the C# language
> specification §7.4.4. "The addition operator"
> (http://msdn.microsoft.com/en-us/library/aa691375.aspx):
>
> > The binary + operator performs string concatenation when one or both
> > operands are of type string. If an operand of string concatenation is
> > null, an empty string is substituted. Otherwise, any non-string
> > argument is converted to its string representation by invoking the
> > virtual ToString method inherited from type object. If ToString
> > returns null, an empty string is substituted.
> >
> >     using System;
> >     class Test
> >     {
> >        static void Main() {
> >           string s = null;
> >           Console.WriteLine("s = >" + s + "<"); // displays s = ><
> >           int i = 1;
> >           Console.WriteLine("i = " + i);        // displays i = 1
> >           float f = 1.2300E+15F;
> >           Console.WriteLine("f = " + f);        // displays f = 1.23+E15
> >           decimal d = 2.900m;
> >           Console.WriteLine("d = " + d);        // displays d = 2.900
> >        }
> >     }
>
>> If you
>> call ToString() then this is an explicit operation to produce a string
>> representation - and it is this string that you add. It is *not* at all
>> the
>> same as adding arbitrary objects on strings. You can't compile a C#
>> program
>> that attempts to add strings and numbers.
>>
> You might have wanted to test out this theory.
>
>  I'm also pretty sure you can't override the default behavior on integers
>> etc
>> (C# does have operator overloading but doesn't allow you to redefine
>> operators on the fundamental types - Java doesn't even have operator
>> overloading).
>>
> Java somewhat does, since "+" is overloaded on String. What Java doesn't
> provide is user-defined operator overloading.
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
>



-- 
http://www.ironpythoninaction.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20090924/b590f75d/attachment.html>


More information about the Python-ideas mailing list