2017-08-03 16 views
3

私はルビーに新しいです、私は非常に、ここで何が起こっているか構文エラー、予期しない「}」、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

edit(https://stackoverflow.com/posts/45481010/revisions)を見ると、主な問題はタイトルが私たちに知らせなかったようです何が問題なのか私が見つけたにもかかわらず、SOユーザは、それらのコード例が間違っていると質問を終わらせようとしますが、それは問題を見つけて修正することが目的であるときには私にとって全く奇妙です。 – AJFaraday

答えて

5

にいくつかのわずかunsualがありますことを問題

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

の変更でありますシンタックスはここで再生され、newコールの最後には単一のコロン(:)が付きます。例えば。

chrome = Watir::Browser.new:chrome 

これは、おそらく、コロンをキー/値の区切り文字として使用できるハッシュパーサーを混乱させます。これは、ruby 1.9以降です。例えば。

周囲のコードに関係なく、コードを評価することはできますが、角かっこで囲みます。おそらく、このコードが動作見つける:

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

更新:を私はワチールのドキュメントをチェックしました、と私はあなたがincorrecly newを呼んでいると信じています。ブラウザのシンボルは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

は(引数の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

はここで正しいコードです。 パセンテンスまたはスペースを付けます。あなたがenv.sh、あなたは合格を保証するために変更を加える必要が

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

のブラウザ - 動的にそれを行うための別の方法として ... これらの記事のいずれかがstackoverflowの上であなたを助けますあなたが設定ファイルで参照してそれぞれのインスタンスをインスタンス化することができる `-type 'か同等の変数です。 お手伝い願います!

3

引数をかっこなしで渡すと、簡単にあいまいになることがあります。例えばリテラルこのハッシュを取る:

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

又は:

{ 
    1 => foo(2), 
    3 => 4 
} 
リテラルこのアレイ、同じ

[foo 2, 3, 4] 
のいずれかとして解釈することができる

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

可能性があります:

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

Rubyのパーサは、このような曖昧さに遭遇すると、それは通常SyntaxErrorを発生させます。その後、明示的にカッコを付ける必要があります。あなたのケースでは

{ 'chrome' => Watir::Browser.new(:chrome) } 
関連する問題