在Ruby中,符号"=>"在方法的参数列表中意味着什么?

Bru*_*Sun 3 ruby symbols

def wait_for_element_present(element)
    wait = Selenium::WebDriver::Wait.new(:timeout => 30);
    wait.until{driver.find_element(element)};
end
Run Code Online (Sandbox Code Playgroud)

请看一下上面的Ruby代码,我有两个问题:

(1)对于"Selenium :: WebDriver :: Wait.new(:timeout => 30)","=>"在这里是什么意思?我知道":timeout"是一个红宝石符号,但是当使用它后跟"=>"和值"30"时,我感到困惑.这是关于红宝石符号的某种伎俩吗?

(2)定义哈希权时我们还有符号"=>"吗?喜欢:

cars = {
'altima' => 'nissan',
'camry' => 'toyota',
'rx7' => 'mazda'
}
puts cars['rx7']   =>   mazda
Run Code Online (Sandbox Code Playgroud)

这里的"=>"与问题(1)中的含义是否相同?

我是一个红宝石新手,任何评论将不胜感激.提前致谢!

Ser*_*sev 5

是的,它具有相同的含义.在这两种情况下,它都是哈希的定义.如果Ruby是方法签名中的最后一个参数,Ruby允许省略hash字符的大括号.

例:

def my_method a, b, h
  puts a
  puts b
  puts h
end


my_method(1, 2, :timeout => 30)
# my_method(1, 2, timeout: 30) # alternative syntax for ruby 1.9+
# >> 1
# >> 2
# >> {:timeout=>30}
Run Code Online (Sandbox Code Playgroud)

请注意,它仅适用于最后一个哈希参数.如果你最后有几个哈希,你必须使用普通形式(带花括号)除了最后一个.