私はどのようにrange.cover?
機能するかを理解しようとしていますが、以下は混乱しているようです-
("as".."at").cover?("ass") # true
と("as".."at").cover?("ate") # false
ass
この例を単独で見ると、が前に来て がat
続く辞書スタイルで評価されるように見えるため、混乱することはありませんate
。("1".."z").cover?(":") # true
この真実は、辞書スタイルではなく ASCII 値に基づいているようです。辞書では、すべての特殊文字が偶数の数字の前にあると予想され、混乱はここから始まるからです。私が思うことが本当なら
cover?
、採用する比較方法、つまりASCII値または辞書ベースのアプローチを使用する方法をどのように決定しますか。そして、範囲は配列でどのように機能しますか。例えば -
([1]..[10]).cover?([9,11,335]) # true
この例は、私は間違っていると思っていました。
cover?
しかし、一見すると、配列を扱う場合、境界値との引数が文字列に変換され、単純な辞書スタイルの比較で true が返されるように見えます。それは正しい解釈ですか?どのようなオブジェクト
Range
を処理するために装備されていますか? 私はそれが取ることができることを知っていますnumbers
(複雑なものを除く), ハンドル,とりわけ値がそれを発生させる間、strings
神秘的に動作することができますarrays
boolean, nil and hash
ArgumentError: bad value for range