From: Ilias Lazaridis Date: 2005-04-04T02:49:43+09:00 Subject: Re: [EVALUATION] - E03 - jamLang Evaluation Case Applied to Ruby Saynatkari wrote: > Le 3/4/2005, "Ilias Lazaridis" a �crit: >>Csaba Henk wrote: >>>On 2005-04-03, Ilias Lazaridis wrote: [...] >>>>but it gives me the basic idea: >>>> >>>>class Object >>>> def meta() @meta ||= {} end >>>>end >>>> >>>>talker.sayYourName.meta[:author] = "it's just me" >>>>puts talker.sayYourName.meta[:author] >>>>=> it's just me >>> >>>If you want metadata for the _function_, then it's not exactly the way >>>to go. >>> >>>The sayYourName method, as defined above, is a side-effecting one, >>>writes out @name, then returns nil, which is a unique object, without >>>any reference to talker. That is, it's not a possible carrier of >>>metainformation. [...] >>I like the extracted construct - and it works in practice. [...] > Just to make sure there is no confusion: > > talker.sayYourName.meta[:author] = "it's just me" > > sayYourName, when evaluated, returns nil. This behaviour seems non logical. talker.sayYourName.meta talker_object->sayYourName_object->meta_object Class object Method object Hash object The sayYourName Method Object is not executed, it's just a part of the nested datastructure. > Therefore, > your meta structure is actually in the instance of > NilClass, not Talker. You should be able to test it > by trying nil.meta[:author] after you execute the > above code. yes, i've verified this (with the quick test it seemed to work). I've understood the example you give below. But I like to have the metadata directly on my function. And this without further indirection (at least not visual). > You would want to follow the original example, > or do something like this (you can elaborate > on the documentation notation): > > class Object > def doc(str) > @doc_data ||= {} > # caller[1] will be the method name doc() was called from. > @doc_data[caller[1]] = str > end > end > > class SomeClass > # Some method > def some_method > doc "This method does something." > # ... > end > end .. -- http://lazaridis.com