Skip to content

Schema delegation to contained dict is incomplete #193

@RossBoylan

Description

@RossBoylan

The comment in schema.jl says "A Schema behaves for all intents and purposes like an immutable Dict" and the user documentation says something similar. But it's not really true. The comment goes on to note

, and delegates the constructor as well as getindex, get, merge!, merge,
keys, and haskey to the wrapped Dict.

which translates to "behaves like a Dict if you call those methods and otherwise not."

I noticed this because about a year ago, with v 0.6.5 I was able to use values to pull out members of the schema, but now this produces an undefined function error. https://discourse.julialang.org/t/statsmodels-values-schema-no-longer-works/46659 provides more background. As noted there it is not clear to me why it stopped working, because even the old version did not define values.

My particular problem can be solved by defining

Base.values(schema::Schema) = values(schema.schema)

but that doesn't solve the general problem that Schema does not act like a Dict in many ways (e.g., my sample code on discourse also shows a failure because iterate is not defined, triggered by the use of foreach).

I don't understand the design goals well enough to know whether implementing the full Dict protocol is a good idea, but the current implementation seems to be at an uncomfortable part-way there point.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions