1

コード行は次のとおりです。

options[:selectors] = [[1, "Spain"], [2, "Italy"]]
v = "Monthly"

value = Hash[options[:selectors]][!!(v =~ /^[0-9]+$/) ? v.to_i : v]

私がよくわからない主要な部分は、最後の行のこの部分です。

[!!(v =~ /^[0-9]+$/) ? v.to_i : v]

どういう意味ですか[!!、どういう=~意味ですか?最後に、全体的な線はどういう意味ですか?

4

2 に答える 2

5

!!「この値をブール値に変更する」という意味のイディオムです。1つ目!は型変換を行い、2つ目!はブール値を維持しながら意味的な意味を元に戻します。

ただし、これはルビーでは実際には適切ではありません。それはPHPismだと思います。

=~正規表現の一致です。

最後に、全体としては、「vがint文字列の場合は、vを整数型にしてハッシュからフェッチします。それ以外の場合は、文字列をキーとして使用します」という意味です。

于 2012-07-14T02:01:58.010 に答える
1

これ!!は二重否定であり、任意のオブジェクトをtrueまたはfalse値に変換するために使用されるイディオムです。

それ以外のオブジェクトが。falsenil評価されるため、機能しtrueます。オブジェクトをfalse否定すると、が生成され、その結果を否定すると次のようになりますtrue

object = Object.new

not object
# => false

not not object
# => true

を否定しようとするnilと、が得られtrue、その結果を否定しようとすると、次のようになりますfalse

object = nil

not object
# => true

not not object
# => false

コード:

!!(v =~ /^[0-9]+$/) ? v.to_i : v

式によって返される値v =~ /^[0-9]+$/(任意のオブジェクト)をまたはのいずれかにtrue変換しますfalseブール値は、三項演算子の引数として使用されます。

つまり、文字列に整数が含まれている場合は整数に変換し、そうでない場合は文字列を返します。

于 2012-07-14T02:10:07.363 に答える