私はRubyが初めてで、他の多くの質問で指摘されているように、ハッシュ値にオブジェクト(myHash.key)としてアクセスできないことに少しがっかりしています(例:ハッシュキーをメソッドとして使用するにはどうすればよいですかクラス?)。openstruct ソリューションが再帰的ではないため気に入らず、Hash クラスを変更したくありません。
したがって、次のソリューションを開発しました。最初に次のモジュールを定義します。
module NiceHash
def method_missing(name, *args, &blk)
if args.empty? && blk.nil? && self.has_key?(name.to_s)
result=self[name.to_s]
if result.is_a? Hash
result.extend(Nice_Hash)
end
return result
else
super
end
end
def respond_to?(sym, include_private = false)
super(sym, include_private) || (self.has_key?(sym.to_s))
end
end
そして、それを使用します
a={"a"=>"a"}
a.extend(NiceHash)
a.a
解決策は機能します。
私の質問は次のとおりです。これは、ラッパー クラスでも実行できます。どちらが良いでしょうか?私は、与えられた解決策で(隠された)問題を見つけました。