On Mon, 15 Nov 2010 21:35:19 +0100 "Simen kjaeraas" <simen.kja...@gmail.com> wrote:
> spir <denis.s...@gmail.com> wrote: > > > On Mon, 15 Nov 2010 12:44:24 -0500 > > bearophile <bearophileh...@lycos.com> wrote: > > > >> spir: > >> > >> > 1. name objects automatically > >> > I need some objects to know their name (as field on themselves). the > >> only solution I can else imagine is for the user write: > >> > x = ...; > >> > x.name = "x"; > >> > >> What if you have two or more references to the same object? > > > > I'm not sure what you mean. The said objects are patterns (instances of > > a Pattern class hierachy). And indeed, they are multiply referenced > > (that's precisely the point of writing a grammar ;-). > > The two (or more) references could not be referred to by the same name. > Sure, they would point to the same object, but how could the object know > whether its functions were called from x or from y? While you may use the > same name everywhere for the same object, the x in function foo is a > different one from that in function bar, not to mention across modules. Oh, yes! I see the point, now, thank you. But in the present case (and a few others where I had to name objects), only the "birth" name is relevant. Here is an example from written using the library I'm writing, I'm sure it's self-explaining. I overloaded opCall in the top Pattern class so that it names the object: ================== test code ==================== auto digits = new String(new Klass("0-9")); digits.name = "digits"; auto DOT = new Literal("."); DOT.name = "DOT"; auto integer = new Compose(digits,DOT,digits); integer.name = "integer"; // output writeln(digits.view()); writeln(integer.view()); writeln-); integer.test("123.45"); writeln-); integer.test("123."); =================== output ====================== digits=[0-9]+ integer=(digits DOT digits) --------------------------------- pattern : integer=(digits DOT digits) text : "123.45" outcome : "(123 . 45)" --------------------------------- Test Error: see outcome below. --------------------------------- pattern : integer=(digits DOT digits) text : "123." outcome : "*failure*" --------------------------------- ********************************* End Of Text Error: end of text reached while matching pattern digits=[0-9]+ at index 4 ********************************* > If I may come with a solution, it would be something like this: > > mixin template New!( T, string name ) { > mixin( "auto " ~ name ~ " = new T(\"" ~ name ~ "\")"); > } Thank you again, I'll explore this path. Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com