方法调用的参数中的冒号 - Ruby

时间:2013-11-27 17:42:26

标签: ruby methods arguments

在查看一些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)的使用。结肠的目的是什么?哈希成员?

3 个答案:

答案 0 :(得分:5)

  

这里结肠的目的是什么?哈希成员?

是的,它是一个Hash对象。

可以使用隐式格式轻松创建Hash

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

当您的键始终是符号时,哈希允许使用其他语法形式。而不是

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

你可以把它写成:

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

答案 1 :(得分:2)

根据Ruby版本,这是Hash文字(1.9)或关键字参数(2.0 +)。

答案 2 :(得分:1)

冒号是符号语法的一部分。

以下是等效的:

namespace:   #only valid inside a hash

:namespace

对于前者,可以省略'hash rocket'运算符(=>)(通常是为了便于阅读)。

但是,只有当您的键是符号时才会出现这种情况。如果你的键是字符串,如

{ 'namespace' => 'api' }

哈希火箭是必需的。