response
変数が返される可能性があります。net/http
から返された応答オブジェクトです。そのオブジェクトのタイプはNet::HTTPNoContent
になります。
最初のif
では、応答オブジェクトがNet::HTTPNoContent
クラスと等しいかどうかを確認しています。そうではありません。 net/http
ライブラリはリクエストが送信されたときにクラスを返さず、リクエストのレスポンスに関するすべての情報を含むオブジェクトを返します(タイプはNet::HTTPNoContent
、または要求)。
ただし、case
の亜種では、処理が少し異なります。 Rubyは、それぞれwhen
ブランチに与えた述語で、Rubyが何をしているのかについて知的にしようとします。問題のクラスのオブジェクトが指定されたクラス(またはそのクラスの子孫)である場合にtrueと評価されるトリプルイコール(===
)(この例では#is_a?
のように) (もちろん、オブジェクトが実際にはの場合)。
(Rubyでは、クラスがあなたのif
バージョンのように、クラス自体へresponse
を比較することができ、そしてそれはまだインタプリタに意味をなす理由である、あまりにもオブジェクトである。)
だから、これが最良の説明していますif
のバージョンを書き直してください:
'case'文は' === 'とは違って' === 'を内部的に使います。 – tadman