Ticket UUID: | 871387 | |||
Title: | dict exists throws unexpected error | |||
Type: | Bug | Version: | obsolete: 8.5a0 | |
Submitter: | mic42 | Created on: | 2004-01-06 02:22:24 | |
Subsystem: | 15. Dict Object | Assigned To: | dkf | |
Priority: | 5 Medium | Severity: | ||
Status: | Closed | Last Modified: | 2004-01-15 05:10:43 | |
Resolution: | Fixed | Closed By: | dkf | |
Closed on: | 2004-01-14 22:10:42 | |||
Description: |
The dict exists subcommand shows a behaviour that is not clearly documented but unexpected, so either this is a documentation bug or a misfeature/real bug. I tried to update msgcat.tcl to dicts and stumbled accross the following: set Msgs [dict create] # create a subdict for a locale dict set Msgs de [dict create] # create a subdict for a namespace dict set Msgs de "" [dict create] # create an entry there dict set Msgs de "" hello Hallo # check if a translation exists dict exists $Msgs fr "" hello This throws an error if the subdict fr and fr "" does not exist. I would expect it to simply return 0. It would be better if it simply returned 0, as there is no good (and fast) workaround. The only alternatives are: set ok 0 set path "" foreach key {fr "" hello} { lappend path $key if {[dict exists $Msgs {expand}$path]} { set ok 1 } else { break } } or: if {[catch {dict exists $Msgs fr "" hello} val]} { ... } As i think a check for element existance is a common operation it should not need such complex workarounds to be useful for nested dicts. The current behaviour would be more appropriate for something like a dict exists -strict command variant. Michael | |||
User Comments: |
dkf added on 2004-01-15 05:10:43:
File Added - 73469: dict.patch dkf added on 2004-01-15 05:10:42: Logged In: YES user_id=79902 I attach the patch I used to fix the fault. dkf added on 2004-01-15 04:13:52: Logged In: YES user_id=79902 Hmm. Is it a bug or a misfeature? I've a test (dict-9.5) checking for exactly this behaviour... Review of documentation indicates bug. :^/ |
Attachments:
- dict.patch [download] added by dkf on 2004-01-15 05:10:43. [details]