语法错误,意外'}',期待keyword_end}

Cod*_*mer 2 ruby syntax-error

我是Ruby的新手,我不太了解这里发生的事情,

这段代码有效

chrome = Watir::Browser.new:chrome
firefox = Watir::Browser.new:firefox
ie = Watir::Browser.new:ie

browser_conf = {
    "chrome" => chrome,
    "firefox" => firefox,
    "ie" => ie
}
Run Code Online (Sandbox Code Playgroud)

但是以下代码会产生语法错误:

browser_conf = {
    "chrome" => Watir::Browser.new:chrome,
    "firefox" => Watir::Browser.new:firefox,
    "ie" => Watir::Browser.new:ie
}
Run Code Online (Sandbox Code Playgroud)

语法错误,意外'}',期待keyword_end}

为什么会这样?有没有一种方法可以隐式写入而不将它们分配给单独的变量?

AJF*_*day 6

这里有一些稍微不正确的语法,在new调用结束时有一个冒号(:) .例如

chrome = Watir::Browser.new:chrome
Run Code Online (Sandbox Code Playgroud)

这可能会混淆散列解析器,它可以使用冒号作为键/值分隔符,因为ruby 1.9.例如

hash = {foo: 'bar'}
Run Code Online (Sandbox Code Playgroud)

无论周围环境如何,您都可以通过将其包装在括号中来强制评估一段代码.您可能会发现此代码有效:

browser_conf = {
  "chrome" => (Watir::Browser.new:chrome),
  "firefox" => (Watir::Browser.new:firefox),
  "ie" => (Watir::Browser.new:ie)
}
Run Code Online (Sandbox Code Playgroud)

更新:我刚刚查看了Watir文档,我相信你的调用非常new正确.浏览器的符号是一个参数new.所以应该在空格之后,或在括号中.如果没有空格或括号,它并不总是能够将其解析为参数.

这是正确的代码:

browser_conf = {
  "chrome" => Watir::Browser.new(:chrome),
  "firefox" => Watir::Browser.new(:firefox),
  "ie" => Watir::Browser.new(:ie)
}
Run Code Online (Sandbox Code Playgroud)