• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Ruby ハッシュ継承クラス、作成方法について)

Rubyハッシュ継承クラスの作成方法について

このQ&Aのポイント
  • ハッシュを拡張し、キーで範囲指定した値を取得したい場合、Rubyでは継承クラスを作成することができます。
  • 値を取得するための速度には注意が必要ですが、範囲指定した値の取得を行う場合に便利です。
  • 具体的な例として、角度に対応する十キーのリストを作成する際に、継承クラスを使用することでスマートに実装することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

No1です。テストはしていませんが、 class Range_List < Hash def initialize(hash)  @list=hash end def [](other)  @list.each { |range, value|   return value if range === other  }  nil end end def Range_List(hash)  Range_List.new(hash) end で、 angle_to_direction = Range_List( a..b=>c, d..e=>f, g..h=>i, ~~)

tsanndayo
質問者

お礼

引き続きご回答ありがとうございます。 上記の通りにやってみたところ、出来ました!! やはり、Kernelに定義するのですね。 引数が、自動的にHashに格納されるとは・・・意外でした。 お陰様でまた一歩前進できそうです。 毎回ご回答下さり、本当にありがとうございます。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

Range_List { xxx..yyy => zzz, ~~~ } のような呼び出し方はできないです。 Range_List( { xxx..yyy => zzz, ~~~ } ) か Range_List ( xxx..yyy => zzz, ~~~ ) か。 Range_Listメソッドはどのように定義していますか? あと、Range_List#initialize はどのように定義していますか?

tsanndayo
質問者

補足

早速のご回答ありがとうございます。 >> Range_List { xxx..yyy => zzz, ~~~ } のような呼び出し方はできないです。 >> Range_List( { xxx..yyy => zzz, ~~~ } ) か Range_List ( xxx..yyy => zzz, ~~~ ) か。 やはりできませんでしたか・・・。 僕としては、Range_List({})と二回括弧を書くよりは、Range_List()で呼び出せればと思っています。 >> あと、Range_List#initialize はどのように定義していますか? 当初はHashを継承しなくても、下記のように呼び出せると思っており、エラーが出てそう甘くないと痛感していたところです。 Hashを継承するにあたり、現在はメソッドが被らないように全てコメントにしています。 class Range_List  #  # オブジェクト作成  #  def self.{}(list)  # エラーが出た為、Hashを継承させる方法を模索・・・   new(list)  end  #  # オブジェクト初期化  #  def initialize(list)   @list = list  end end まだまだRubyの深い部分を知らず、記述がイマイチ分かりません・・・。 どうか引き続きご回答の程お願い致します。

関連するQ&A