Ruby中双管的含义是什么?

时间:2017-03-17 09:45:47

标签: ruby

我掌握了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'})

1 个答案:

答案 0 :(得分:2)

c_enc = opts['encode'] || false

在此行中,如果opts [' encode']不是nil,则c_enc的值将设置为opts [' encode']否则它将为false

案例2

如果选项['编码']为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 ||

基本上在您的示例中,opts [' encode']不应为false或nil。如果它不是false或nil,opts [' encode']内的任何内容都将被分配给c_enc

现在根据你的问题

您在方法调用中传递哈希,opts是接收参数。现在来到第一行

c_enc = opts['encode'] || false,现在opts['encode'] = nil opts是哈希。您通过哈希[' key'] 查找哈希条目,因此c_env = false