2013-11-27 49 views
2
尋找一些Ruby代碼時

我發現下面的方法:科隆在方法調用的參數 - 紅寶石

def connection 
    unless @_mc_connection && valid? && @_ns_version == get_version 
     @_mc_connection = ::Dalli::Client.new(self.dalli_servers, self.dalli_options.merge(namespace: namespace)) 
    end 
    @_mc_connection 
    end 

我的問題是關於使用dalli_options.merge(namespace: namespace)。這裏冒號的目的是什麼?是一個散列成員?

+0

谷歌「紅寶石散列語法」 –

+0

是的,這是一個散列。當散列鍵是一個符號時,你可以這樣寫。 – uncutstone

回答

5

這裏冒號的目的是什麼?是一個散列成員?

是的,它是一個哈希對象。

Hash可以通過使用其隱含的形式很容易地創建的:

grades = { "Jane Doe" => 10, "Jim Doe" => 6 } 

散列允許替代語法形式時鑰匙總是符號。

options = { font_size: 10, font_family: "Arial" } 
+1

我不得不嘗試一下,因爲我會認爲需要使用{}來區分哈希和命名參數。果然,'{} .merge(帽子:'貓')=> {:帽子=>「貓」}'。啊哈,一個命名參數不過是一個哈希! –

+0

@CarySwoveland是的..你是對的.. –

1

冒號是符號語法的一部分:與其

options = { :font_size => 10, :font_family => "Arial" } 

,你可以寫它。

以下是等效的:

namespace: #only valid inside a hash 

:namespace 

在前者中, '散列火箭' 操作符(=>)可以省略(並且通常是爲了便於閱讀) 。

但是,只有當您的鑰匙是符號時纔是這種情況。如果你的鑰匙是字符串,如在

{ 'namespace' => 'api' } 

哈希火箭是必需的。

1

根據Ruby版本,這可能是Hash文字(1.9)或關鍵字參數(2.0+)。