【问题标题】:In Ruby, what does the symbol "=>" mean in a method's parameter list?在 Ruby 中,方法的参数列表中的符号“=>”是什么意思?
【发布时间】:2023-04-08 09:51:01
【问题描述】:
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)的意思一样吗?

我是红宝石新手,任何 cmets 将不胜感激。提前致谢!

【问题讨论】:

    标签: ruby symbols


    【解决方案1】:

    是的,意思是一样的。在这两种情况下,它都是哈希的定义。如果哈希字面量是方法签名中的最后一个参数,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}
    

    请注意,它仅适用于最后一个参数,即哈希。如果最后有多个哈希值,则必须对除最后一个之外的所有哈希值使用普通形式(带花括号)。

    【讨论】:

    • 我在这里发现了一些有趣的东西:stackoverflow.com/questions/969900/…。在第二个答案中,它说:“Rails 和其他 Ruby 代码通常将哈希作为参数传递给方法,以实现与 Python 等其他语言中的命名参数相同的效果。”所以这里的用法与命名参数相同吗? Selenium::WebDriver::Wait 的构造函数有一个名为“timeout”的参数,对吧?
    • 谢谢,Sergio,我非常感谢您的帮助以及其他人的回答。 Ruby 与 C# 如此不同,以至于我开始意识到我不能将太多的 C# 思维带入 Ruby 学习中。
    • Ruby 2 将有真正的命名参数。 C# 是否已经拥有它们(我已经有一段时间没有接触它了)?
    • 是的,我们从 C#.NET 4.0 开始就有它
    【解决方案2】:
    Selenium::WebDriver::Wait.new(:timeout => 30)
    

    是简写

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

    它的参数中有一个哈希值。

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2021-03-23
      • 2014-12-06
      • 2020-06-29
      • 2016-10-17
      相关资源
      最近更新 更多