2017-03-17 42 views
-1

我有Python的基礎知識,我正在努力學習Ruby。我看到下面的方法似乎是一個哈希表。我不明白雙管道正在做什麼,如果有人能告訴我爲什麼使用這個和Python的等價物,我會很感激。方法代碼中的紅寶石雙管 - 等價的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或or,但不等於Ruby'或'(它具有不同的優先級)。 –

+1

我只是不能從噸類似的問題中選擇一個來關閉這個問題。 [挑選自己](http://stackoverflow.com/search?q=ruby+double+pipe):) –

回答

2

c_enc = opts['encode'] || false

在該行,如果OPTS [ '編碼']不是nil,c_enc的值將被設定爲選擇採用[「編碼」]否則會是假的

案例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 || 

基本上在你的例子,選擇採用[ '編碼']不應該有誤或爲零。如果它比假的或無其他任何在裏面選擇採用[「編碼」]將被分配到c_enc

現在按照你的問題

你逝去的哈希方法調用,選擇採用的是接受爭論。現在來到第一行

c_enc = opts['encode'] || false,現在opts['encode'] = nil,選擇是散列。你用hash ['key']查找一個條目所以c_env = false

+1

@EricDuminil這是一個更好的版本? – gates

+0

更好,是的。你也可以用字符串顯示一些例子,而不是給出一個布爾值或位需要的印象。 –

+0

您能否也請舉一個例子,使用我在原文中給出的電話?謝謝 – ade1e