2017-08-03 155 views
3

我是新来的Ruby,我不太让这里发生了什么,语法错误,意外“}”,期待keyword_end}

此代码的工作

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

browser_conf = { 
    "chrome" => chrome, 
    "firefox" => firefox, 
    "ie" => ie 
} 

但下面的代码生成语法错误:

browser_conf = { 
    "chrome" => Watir::Browser.new:chrome, 
    "firefox" => Watir::Browser.new:firefox, 
    "ie" => Watir::Browser.new:ie 
} 

syntax error, unexpected '}', expecting keyword_end }

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

+0

有些人投票决定关闭这个问题!如果任何人可以解释如何改进这将是非常有帮助的 – Codeformer

+1

看编辑(https://stackoverflow.com/posts/45481010/revisions),它看起来像主要问题是,标题没有通知我们问题是什么。虽然我发现一些SO用户会尝试关闭问题,如果其中的代码示例是错误的,这对我来说非常奇怪,目的是要找到并纠正问题。 – AJFaraday

回答

5

有一些稍微用unsual语法在这里玩,在new调用结束时用一个冒号(:)。例如。

chrome = Watir::Browser.new:chrome 

这可能是令人困惑的哈希解析器,其可以使用冒号作为键/值分体,由于红宝石1.9。例如。

hash = {foo: 'bar'} 

不管周围环境如何,您都可以强制一段代码进行评估,但是通过将其包含在括号中。您可能会发现此代码的工作:

browser_conf = { 
    "chrome" => (Watir::Browser.new:chrome), 
    "firefox" => (Watir::Browser.new:firefox), 
    "ie" => (Watir::Browser.new:ie) 
} 

更新:我刚刚检查过的Watir文档,我相信你打电话new incorrecly。浏览器的符号是new的参数。所以应该在空格之后或括号中。如果没有空格或括号,它并不总是能够将其解析为一个参数。

下面是正确的代码:

browser_conf = { 
    "chrome" => Watir::Browser.new(:chrome), 
    "firefox" => Watir::Browser.new(:firefox), 
    "ie" => Watir::Browser.new(:ie) 
} 
+0

_“应该在空格之后[...] _ - '{'chrome'=> Watir :: Browser.new:chrome}'不起作用,这里必须使用圆括号。 – Stefan

4

我觉得这里的问题

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

修改成(paranthesis为参数)

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

或(参数之前空间)

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

'chrome = Watir :: Browser.new:chrome'(没有空格)是不常见的,但确实有效。你不能忽略哈希文字中的括号。 – Stefan

1

你缺少浏览器名称的前面的参数的空间。 提供pamentalhesis或空间。 或者动态地做这件事.. 这些职位将帮助你在计算器 -

If you want to call different environment through command line go to - link-one

For Ruby symbols to be passed take reference from - link-two

否则,

Comparison between doing it with Watir vs Webdriver, please visit - External Link

您需要更改env.sh,并确保你通过“浏览器类型'或等价变量,你可以在配置文件中引用并实例化相应的变量。 希望它有帮助!

3

传递没有括号的方法参数很容易变得模糊不清。借此散列字面例如:

{ 1 => foo 2, 3 => 4 } 

可能被解释或者作为:

{ 1 => foo(2, 3 => 4) } 

或为:

{ 
    1 => foo(2), 
    3 => 4 
} 

同此数组文本:

[foo 2, 3, 4] 

这可能是:

[foo(2, 3, 4)] 
[foo(2, 3), 4] 
[foo(2), 3, 4] 

当Ruby的解析器遇到这种模糊性时,通常会产生一个SyntaxError。然后您必须明确提供括号。

你的情况:

{ 'chrome' => Watir::Browser.new(:chrome) } 
相关问题