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

时间:2012-08-29 13:03:42

标签: ruby symbols

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

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

(1)对于“Selenium :: WebDriver :: Wait.new(:timeout => 30)”,“=>”是什么这意味着什么我知道“:timeout”是一个红宝石符号,但是当使用它后跟一个“=>”和一个值“30”,我感到困惑。这是关于红宝石符号的一些技巧吗?

(2)我们还有符号“=>”什么时候定义哈希吧?像:

cars = {
'altima' => 'nissan',
'camry' => 'toyota',
'rx7' => 'mazda'
}
puts cars['rx7']   =>   mazda

“=>”这里有与问题(1)中相同的含义吗?

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

2 个答案:

答案 0 :(得分:5)

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

示例:

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}

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

答案 1 :(得分:1)

Selenium::WebDriver::Wait.new(:timeout => 30)

的简写
Selenium::WebDriver::Wait.new({:timeout => 30}) 

它的参数需要一个哈希值。