Ticket UUID: | 9d0cfbc51e3b6281aae4447c3603591dc0ec35d9 | |||
Title: | method [create] is handled very differently from other methods | |||
Type: | Bug | Version: | tcl8.6.1 | |
Submitter: | cmcc | Created on: | 2014-01-27 00:45:04 | |
Subsystem: | 35. TclOO Package | Assigned To: | nobody | |
Priority: | 5 Medium | Severity: | Important | |
Status: | Closed | Last Modified: | 2014-01-27 12:01:47 | |
Resolution: | Invalid | Closed By: | dkf | |
Closed on: | 2014-01-27 12:01:47 | |||
Description: |
From the following: oo::class create creator { method moop {args} { puts stderr "moop" } method create {args} { puts stderr "create" } constructor {args} { puts stderr "constructed" } } creator create fred fred moop I get the output: constructed moop Where I would have expected to see 'create' ... this represents a pretty significant change to the relationship between oo::class and the rest over earlier tcloo versions, and also suggests that "create" has become something of a reserved word within tcloo. Is there some documentation for this behaviour? Colin | |||
User Comments: |
dkf added on 2014-01-27 12:01:47:
Everything looks fine to me, and I've not done anything odd here for ages. % oo::class create creator { method moop {args} { puts stderr "moop" } method create {args} { puts stderr "create" } constructor {args} { puts stderr "constructed" } } ::creator % creator ? unknown method "?": must be create, destroy or new % creator create fred constructed ::fred % fred ? unknown method "?": must be create, destroy or moopHowever, it should be noted that the create that you normally see is the one provided by the class object, not the instance object. It's actually a normal method that is implemented in C and defined on the oo::class class. % info class methods oo::class create new % info class methods oo::class -all create destroy new(The -all means use the superclass method implementations as well, so it picks it up from the oo::object class.) Metaclasses are funky stuff. |