2013-11-27 14 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+)。