2

私は通常、別のハッシュからデータを初期化したいハッシュ子クラスを持っており、これを使用しました:

class ValidatedJson < Hash
    @schema = {}
    def initialize(hash = {})
        super
        JSON::Validator.validate!(@schema, hash, :validate_schema => true)
        self.update(hash)
    end

    def [](key)
        self.fetch(key)
    end
end

ただし、self.updateのみを使用すると、ネストされたハッシュは、子クラスValidatedJsonのプロパティを持つのではなく、Hash型になります。これを確実にするための迅速で効率的な方法を知っている人はいますか?

4

1 に答える 1

2

私はおそらくActiveSupportが行うことをエミュレートします。それは、コンストラクターと同様HashWithIndifferentAccessにオーバーライドすることです。update()

それらの実装については、 https://github.com/rails/rails/blob/master/activesupport/lib/active_support/hash_with_indifferent_access.rbを参照してください。

于 2012-09-26T02:58:54.527 に答える