ruby-1.9.3-p194 Rails 3.0.9
条件式評価の奇妙な振る舞いに遭遇しました。
コードの一部を見てください:
module SimpleCaptcha
module ControllerHelpers
def simple_captcha_valid?
t = Logger.new(STDOUT)
return true if Rails.env.test?
if params[:captcha]
data = 'SHGHGD'
result = data == params[:captcha].delete(" ").upcase
t.debug data
t.debug params[:captcha].delete(" ").upcase
t.debug result
else
return false
end
end
end
end
デバッグコンソールに表示される内容は次のとおりです。
SHGHGD
WEWE
nil
ご覧のとおり、nilは評価結果= data == params [:captcha] .delete( "").upcaseの結果です。
しかし、なぜ???
データは'SHGHGD'params
[:captcha] .delete( "").upcaseはWEWEです
なぜゼロなのか?それは偽でなければなりません。