Le 3/4/2005, "Ilias Lazaridis" <ilias / lazaridis.com> a ñÄrit: >Csaba Henk wrote: >> On 2005-04-03, Ilias Lazaridis <ilias / lazaridis.com> wrote: >> >>>>>def talker >>>>> >>>>> def sayHello >>>>> puts "Hello World" >>>>> end >>>>> >>>>> def sayYourName >>>>> puts @name >>>>> end >>>>> >>>>>end >> >> [snip] >> >>>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. >> >> What seems to be feasible is implementing one of the following >> behaviours: >[...] - (several other suggestions) > >I like the extracted construct - and it works in practice. > >Thus I'm covered in this point. > >Thank you for your suggestions. Just to make sure there is no confusion: talker.sayYourName.meta[:author] = "it's just me" sayYourName, when evaluated, returns nil. 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. 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 E No-one expects the Solaris POSIX implementation!