まあ、確かにあなたはどこか別の場所で、後で他の行で閉じられるオープンクォートを持っているように見えます。
楽しい事実:
ruby_hash = {}
ruby_hash['class Atom
def initialize
end
end'] = 0
動作します。ただの文字列キーだからです。つまり、巨大な長い文字列を'params'ハッシュへのキーとして評価しているだけです。これは、ハッシュ内の既存のキーではないため、間違いなくnilと評価されます。
編集!あなたは質問を編集し、より多くの情報を提供しました。これを分解しましょう。
params = {"a"=>3, "id2"=>"2", "b"=>2, "id"=>"1", :id=>"2"}
# Simple enough, nothing strange here.
if params['a'] < 0 || params['a'] > params['b' || params[:b] < 1]
puts 'strange...'
end
The plot thickens, or does it?
もしも!
params['a'] < 0
つまり、もちろん、パラメータの「a」の値が0未満の場合
||
...それは'または'を意味します
params['a'] >
ここで1秒間停止します-「a」の値が...より大きい場合。
params['b' || params[:b] < 1]
待って、何?もっと深く見てみましょう。
params[ => We look inside the hash
'b' || params[:b] < 1 ## HERE IS THE 'MAGIC' => 'b' || params[:b] < 1
] # end of the key
したがって、魔法は次のようになります。:間のORステートメントの結果が必要です。
では、実際に何が起こっているのでしょうか。実際、'b'はfalseではないため、params ['b']の値を返すだけなので、これが実際のifステートメントです。
if params['a'] < 0 || params['a'] > params['b']
'b'が何らかの理由でfalseと評価された場合、「params [params [b:] <1]」になります。これは、この場合はfalseになり、「params[false]」を意味します。
これは意味がありますか?