2017-03-17 8 views
-1

私はRubyを学ぶためにPythonとImの基本的な知識を持っています。私は次のメソッドがハッシュテーブルに見えるものを持っていることがわかります。私は二重パイプが何をしているのか理解しておらず、誰かがなぜこれが使われているのか、それと同等のPythonのものなのかを私に見せてもらえると感謝します。追加のコンテキストについてメソッドコードのRuby二重パイプ - Pythonの同等のもの

def request_raw(opts={}) 
     c_enc = opts['encode']  || false 
     c_uri = opts['uri']  || '/' 
     c_body = opts['data']  || '' 
     c_meth = opts['method']  || 'GET' 
     c_prot = opts['proto']  || 'HTTP' 

次のように、メソッドが呼び出されることがあります。この行で

send request_raw({'uri' => '/', 'method' => 'GET'}) 
+0

これはpython 'または'と同じですが、Ruby 'または'とは等価ではありません(優先順位が異なります)。 –

+1

私はちょうどこれを閉じるために同様の質問のトンから1つを選ぶことができません。 [自分で選ぶ](http://stackoverflow.com/search?q=ruby+double+pipe):) –

答えて

2

c_enc = opts['encode'] || false

OPTS [ 'エンコード']は、c_enc意志の値ゼロでない場合それ以外の場合はfalseになります[ 'エンコードを']付き合えないように設定すること

ケース2

opts ['encode']がfalseの場合、||の右側にあるfalseがc_encに割り当てられます。

他の例はあなたの例では、基本的に

1 || false => 1 
    false || 1 => 1 
    false || false => false 
    true || false => true 
    "foo" || false => "foo" #because string foo is not false or nil 
    "foo1" || "foo2" => "foo1" #because foo1 is not false or nil, it short circuits and will not bother to evaluate the right hand side of || 

、偽のかnilいけない[ 'エンコードを']付き合えません。それが偽かnil以外であれば、内部で何を使用すると、メソッド呼び出しでハッシュを渡しているあなたの質問

ごとに[「エンコード」]は今

をc_encするために割り当てられます付き合え、付き合えです議論を受け取る。今すぐ最初の行に来る

c_enc = opts['encode'] || false、今opts['encode'] = niloptsはハッシュと同じです。 hash ['key']でハッシュのエントリを検索する So c_env = false

+1

@EricDuminilはこれが良いバージョンですか? – gates

+0

より良い、そうです。ブール値またはビットが必要であるという印象を与えないために、文字列でいくつかの例を示すこともできます。 –

+0

元の投稿に書いた電話を使って例を挙げてもいいですか?おかげで – ade1e

関連する問題