Actually, I really don't think we're talking about the same thing. I think you were confused by my github link pointing to a instance variable set to nil. A better example is in Roda::RodaRequest.The initialize block sets:@match_pattern_cache = ::Roda::RodaCache.newAnd a matching @match_pattern_cache is used in RodaPlugins::Base::RequestClassMethods on this line https://github.com/jeremyevans/roda/blob/8065b69a74a098d40f1e494820491500c6f276e5/lib/roda/request.rb#L29but it is actually coming from the attr_accessor defined right above it and the value is set when inheriting from Roda here https://github.com/jeremyevans/roda/blob/8065b69a74a098d40f1e494820491500c6f276e5/lib/roda.rb#L258I believe the variable set in the initialize block can be removed along with the ones I was referring to in the first post since they are all in the same situation with the things that use the @variables all being modules that will be extended and so are working at the class-level and not the instance level.Does that make more sense?
Hopefully this isn't bothersome. I'm studying Roda to see if the plugin pattern you made can be used effectively in the Crystal language.