We could definitely add a __repr__ for the normal .NET lists (and even other standard types like Dictionary). Maybe something like Python's set's repr so it'd look like:
List[object]([2, 3, 4]) Does that look good? -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Douglas S. Blank Sent: Wednesday, May 28, 2008 2:08 PM To: Discussion of IronPython Subject: Re: [IronPython] What C# methods do __repr__ and __str__ use? Dino Viehland wrote: > The problem w/ a common __repr__ is that each language will > presumably have different syntax for creating the object. For > example a better repr in Python might be: > > Pixel(255,255,128) > > Where Ruby should probably display something like: > > Pixel.new(255,255,128) Agreed. But maybe there can be some name *patterns* that if implemented once would suffice for most languages. I'm not too worried about this though. > Having a repr of [255,255,128] isn't that meaningful because if I > copy and paste that into my code I get a list instead of a Pixel > back. Sorry, I switched issues on you :) That was the point of that example... generic lists don't look like lists at all. I'm actually more concerned with this example than the previous. A generic list of ints, strings, etc. ought to be able to have a better representation in IP. > We could revisit what our default repr does for .NET objects > that override ToString. We discussed it once on the list long ago > but that was mainly focused on dealing w/ multi-line ToStrings if I > recall correctly - the thought of playing better with multiple > languages wasn't much of an issue back then for us. > > So basically I am open to suggestions :) Perhaps generic lists could inherit a version of Python List's __repr__? (But of course, not just for Python, but for Ruby, etc.) Thanks! -Doug > -----Original Message----- From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Douglas S. > Blank Sent: Wednesday, May 28, 2008 1:47 PM To: Discussion of > IronPython Subject: Re: [IronPython] What C# methods do __repr__ and > __str__ use? > > Dino Viehland wrote: >> You'll want to implement the ICodeFormattable interface. It looks >> like we don't pick up a method that's just named __repr__ right >> now. I could see us fixing that but I wouldn't think it's a high >> priority unless someone finds implementing ICodeFormattable >> burdensome. > > Thanks, that did the trick (sample attached below)! It isn't > burdensome, but I wonder about what will happen when we use IronRuby, > too? We'll we need repr methods for each language? > > I also wonder if things like a generic list couldn't pick up a > reasonable default __repr__ for use in all DLR languages. > > We're using the .NET languages in an educational environment for new > students. Currently, we're going to have to add the __repr__ to all > classes, and add subclasses to all types for which there isn't a > reasonable repr default. For example, there is a pretty big > difference between: "[255, 255, 128]" and "<List<GraphicsCore+Pixel> > object at 0x000002C [List<GraphicsCore+Pixel>]>" or whatever it might > be. > > In any event, we have a work around now; thanks again! > > -Doug > > using System; using IronPython.Runtime; // for ICodeFormattable using > Microsoft.Scripting.Runtime; // for CodeContext public class TestMe : > ICodeFormattable { public virtual string __repr__(CodeContext > context) { return String.Format("<Hi Mom>"); } } > > >> -----Original Message----- From: [EMAIL PROTECTED] >> [mailto:[EMAIL PROTECTED] On Behalf Of Douglas >> S. Blank Sent: Wednesday, May 28, 2008 12:22 PM To: Discussion of >> IronPython Subject: Re: [IronPython] What C# methods do __repr__ >> and __str__ use? >> >> Anyone have an answer for this: I can't write C# code that has its >> own method for use in repr(). Am I missing something? >> >> -Doug >> >> Douglas S. Blank wrote: >>> On Fri, May 23, 2008 3:37 pm, Toni Alatalo said: >>>> Douglas S. Blank kirjoitti: >>>>> will use it? Likewise, what C# method is used in Python's >>>>> str(obj)? >>>>> >>>> i don't know, but would guess ToString() .. and wonder about it >>>> if it wasn't that but something else :o repr() can't guess, i >>>> don't think there's an equivalent in .net, but can very well be >>>> mistaken there. >>> It looks like the C# method __str__ is used for the Python >>> method, but in IP2B2 the C# method __repr__ is getting >>> overwritten by an auto generated method. Is that a bug, or is >>> there something I'm missing? >>> >>> $ ipy2 -i python/graphics.py >>>>>> pm = Pixmap() pm.getPixel(0,0) # What is >>>>>> this calling? >>> <Pixel object at 0x2B> >>>>>> pm.getPixel(0,0).__repr__() # This is repr() too >>> '<GraphicsCore+Pixel object at 0x2C [GraphicsCore+Pixel]>' >>>>>> pm.getPixel(0,0).__Repr__() # This is mine >>> '<Pixel at (0,0)>' >>>>>> pm.getPixel(0,0).__str__() # That is mine, and >>>>>> str() >>>>>> >>> '<Pixel at (0,0)>' >>>>>> pm.getPixel(0,0).ToString() # Used by __repr__ >>> 'GraphicsCore+Pixel' >>> >>> -Doug >>> >>>>> -Doug >>>>> >>>> ~Toni >>>> >>>> _______________________________________________ Users mailing >>>> list [email protected] >>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >>>> >> _______________________________________________ Users mailing list >> [email protected] >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> _______________________________________________ Users mailing list >> [email protected] >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> > > _______________________________________________ Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > _______________________________________________ Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
