コレクションが文字列のインデックス付けをサポートしているかどうかをテストする効率的なRubyqueの方法はありますか?コレクションのインデックス型(つまり、[]メソッドの引数)のテスト
ロングバージョン: 特定の値を正規化するクラスがあります。これを実現するために、インスタンスは 'values'属性として値のコレクションを取ります。 values=
は、リスト(組み込み配列を含む整数インデックス付きコレクション)と結合配列(Hashなどのオブジェクトインデックス付きコレクション)の両方を受け入れるようにしたいと思います。リストを渡すと、キー&の値を反転することによってリストを連想配列に変換します。これは、メソッドが連想配列からリストを区別する必要があることを意味します。 ArrayやHashの子孫だけではなく、インデックスされたコレクションでも動作するはずです。コレクションタイプを盗聴するような種類のものは、醜いものと誤ったものとみなされます。しかし、インデックスタイプを盗聴するタイプ...
現在、私は違いを伝えるために例外を使用していますが、一般的な制御構造ではなく、例外的な状況に対して例外を使用することを好みます。それは単なる個人的な好みです、私はあまりにも付いていないです。この問題を解決するために例外がルビーの方法である場合は、教えてください。
def values=(values)
begin
values['']
@values = values.dup
rescue TypeError
@values = Hash[ values.zip((0..values.length-1).to_a) ]
end
@values.each_value { |v| @values[v] = v}
end
注:完全なソリューションをvalues
の推移閉包を取るだろうが、今の私はvalues
の&値が異なるドメインからある鍵をとることができます。
toggle.values = [:off, :on]
toggle.normalise(:off) == 0
toggle.normalise(1) == 1
bool.values = {:off => 0, :false => 0, :no => 0,
:on => 1, :true => 1, :yes => 1}
bool.normalise(:yes) == 1
bool.normalise(0) == 0
PS:
このすべての点のようなコードを可能にすることです。これは個人的なプロジェクトのため、優雅さとRubyのやり方が最優先です。私は面白いアプローチを探しています。特に、興味深い概念を説明する場合(「例外は行動テストとして使用できます」など)
ヤイダックタイピング! collection.to_hashが中間で一時的な複製を作成せずに(collection.to_hash.dupが行うかもしれないように)、collection.to_hashが複製であることを保証するきれいな方法はありますか? – outis
"空を見上げてください、それは鳥です。それは飛行機です。いいえ、初めてでした、それは鳥です。" – outis
object_idsを比較できます。それは魔法のように清潔ではありませんが、それは動作します。 – rampion