ハッシュを拡張し、値をキーで指定した範囲内から取得したいと思っているのですが、ハッシュと同じように作成できないのでしょうか?
試行錯誤してみたのですが、記述が分かりません・・・。
class Range_List < Hash
#
# 範囲に対応する、値を取得(速度が気になりますが・・・)
#
def [](other)
@list.each { |range, value|
return value if range === other
}
nil
end
end
# 角度 (0..1) に対応する、十キーのリストを作成
angle_to_direction = Range_List{ # => エラー。このような記述で呼び出したい
0.0625..0.1875 => 3,
0.1875..0.3125 => 2,
0.3125..0.4375 => 1,
0.4375..0.5625 => 4,
0.5625..0.6875 => 7,
0.6875..0.8125 => 8,
0.8125..0.9375 => 9,
0.9375..1 => 6,
0..0.0625 => 6
}
# 角度対応の十キーを求める
p angle_to_direction[0.1] # => 3
どうかご回答お願いいたします。
No.1
- 回答日時:
Range_List { xxx..yyy => zzz, ~~~ } のような呼び出し方はできないです。
Range_List( { xxx..yyy => zzz, ~~~ } ) か Range_List ( xxx..yyy => zzz, ~~~ ) か。
Range_Listメソッドはどのように定義していますか?
あと、Range_List#initialize はどのように定義していますか?
この回答への補足
早速のご回答ありがとうございます。
>> 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の深い部分を知らず、記述がイマイチ分かりません・・・。
どうか引き続きご回答の程お願い致します。
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, ~~)
引き続きご回答ありがとうございます。
上記の通りにやってみたところ、出来ました!!
やはり、Kernelに定義するのですね。
引数が、自動的にHashに格納されるとは・・・意外でした。
お陰様でまた一歩前進できそうです。
毎回ご回答下さり、本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonのerrorコード
-
パイソンのクラス
-
No route matches [GET] "/post...
-
Rubyについて質問です
-
テンプレートの特殊化でコンパ...
-
Ruby
-
クラス名やモジュール名の競合...
-
Ruby ハッシュ継承クラス、作成...
-
ぱいソン
-
Ruby:シルバーについて
-
実行時エラー450:引数の数が一...
-
正規表現で両端に文字列を置換
-
get() と find() の違いについて
-
VBA/GetTickCountの49.7日の境...
-
Csvファイルの最終行を取得する...
-
Rubyでクラスファイルをディレ...
-
エラー「メソッドまたはデータ...
-
10円未満を切り捨てる方法は?
-
VBAで型が一致しないエラー(バ...
-
Ruby 特異メソッドのnewが先に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonのerrorコード
-
What class are you in? には何...
-
パイソンのクラス
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
Rubyについて質問です
-
変数の隠蔽とは?
-
HSTLやSSTL等のI/Oピン
-
クラスの再定義について(C++)
-
redirect先でredirect元の変数...
-
Ruby ハッシュ継承クラス、作成...
-
classのdelete
-
Rubyの質問です
-
PostScript言語で定積分の計算
-
class roomとclassroom どちら...
-
テンプレートの特殊化でコンパ...
-
get() と find() の違いについて
-
「arg」は何の略?
-
エラー「メソッドまたはデータ...
-
教えてください。vb5.0
おすすめ情報