2016-07-14 19 views
-1

を期待しては、私が独立して動作するように思われるブロックを持っているが、私はコードサンプルにそれを置くとして、それは構文エラーで失敗します。Rubyの構文エラー:予期しないkeyword_end、入力終了

9 def get_version(name, user, pass, type, organization, art_module, repos, version) 
10 puts case 
11 when type.match(/snapshot$/i) 
12 p version 
13 when version.match(/latest$/i) 
14   string_object = open("https://artifactory.xxx.io/artifactory/api/search/versions?g=#{organization}&v=*.*.?&a=#{art_module}&repos=#{repos}", :http_basic_authentication=>["#{user}", "#{pass}"]) 
15   json_file = JSON.parse(string_object.read) 
16   version_array = Array.new 
17   json_file["results"].each do |version| 
18   version_array.push(version["version"].sub /-.*$/, '') 
19   end 
20   #p unique_versions=(version_array.uniq).max 
21 else 
22   p "here" 
23   string_object = open("https://artifactory.xxx.io/artifactory/api/search/versions?g=#{organization}&v=*.*.?&a=#{art_module}&repos=#{repos}", :http_basic_authentication=>["#{user}", "#{pass}"]) 
24   json_file = JSON.parse(string_object.read) 
25   version_array = Array.new 
26   json_file["results"].each do |version| 
27   version_array.push(version["version"].sub /-.*$/, '') 
28   end 
29   p unique_versions=(version_array.uniq).min 
30 end 
31 when type.match(/release$/i) 
32 ... 


SyntaxError 
==> default: ----------- 
==> default: C:\vagrant-chef\a2c27477ebffe71b9594bbbb58557887\cookbooks\dj_productivity_any\providers\dj_artifactory_version.rb:26: syntax error, unexpected keyword_do_block, expecting keyword_end 
==> default:   json_file["results"].each do |version| 
==> default:         ^
==> default: C:\vagrant-chef\a2c27477ebffe71b9594bbbb58557887\cookbooks\dj_productivity_any\providers\dj_artifactory_version.rb:30: syntax error, unexpected keyword_end, expecting end-of-input 
+1

'予期せぬkeyword_do_block、expecting keyword_end'このエラーは通常、上のコードのどこかに終わりか閉じかっこや閉じ括弧がないことを意味します...' dj_artifactory_version.rb:26'この部分は、エラーは26行目にあります。つまり、あなたの問題は26行目の行にあります...コードに行番号が何であるのかを示していないので、LOCの内容を特定できません'when version.match(/ latest $/i)'セクションにあると推測してください –

+1

私が気づいている奇妙なことは、あなたが 'case'キーワードの直後に何も持っていないということです。 'when'ステートメントのそれぞれに... ... - 新しい' case'ステートメントを開かずにステートメントを*入れ子にしようとしていますか?それだけでは動作しません。 –

+0

@TarynEast - 行番号が含まれています。 – Scooby

答えて

1

あなたはそれがあるいくつかの可能性をテストしている1つのの事を持っている場合、私はあなたが何をあなたが本当にしたいことであれば/他

単なるオーレであるときは、のみユースケースべきケースを使用していると思います例えば:

case my_string 
when /blue/ 
    do blue stuff 
when /yellow/ 
    do yellow stuff 
when /red/ 
    do red stuff 
else 
    do something else 
end 

あなたはないあなたはここで何をしているか、複数の物事が例えばテストするためにそれを使用する必要があります。

case # nothing here to compare against the `when` cases 
when type.match(/snapshot$/i) # here you are comparing type 
when version.match(/latest$/i) # and now version 
when type.match(/release$/i) # and now type again 

も... はうまくいきません。。あなたのコードは、技術的には、この行います。私はあなたが本当にやろうとしているは(私が間違っている場合は、この上で私を修正)> 場合は、最初の1内部の二case文の巣だと思う

case # open the case statement 
when type.match(/snapshot$/i) # first match 
when version.match(/latest$/i) # second match 
else # this counts as the else clause of the first case 
end # this has now closed the case statement completely 
# and now there's another when... without a case... which is why yuour code is borking 
when type.match(/release$/i) # and now type again 

だから...あなたは本当に本当に、本当に事例を必要としません。 - 権利を a)は、実際にあなたがケース文でtestignているものを指定:あなたは本当に、本当に、あなたはいくつかのことを行う必要があり、ケース・ステートメントを使用する必要がある場合だけ、この

if type.match(/snapshot$/i) # first match 
    if version.match(/latest$/i) # second match 
    else # this counts as the else clause of the second if-statement 
    end # this has now closed the second if-statement 
elsif type.match(/release$/i) # and now we test a second option against type 
end # and this closes the first if-statement 

のような場合/他の使用一つだけ存在するとき場合、文は絶対にやり過ぎであることを

case type 
when /snapshot$/i # first case - first option (testing type) 
    case version 
    when /latest$/i # second case - first option (testing version) 
    else # else clause of second case 
    end # end of second case 
when /release$/i # first case - second option (testing type) 
end # end of first case 

注:単語case b)の繰り返しキーワードcaseあなたがそれらの新しい、ネストされたセットを開いているたびに...例えば後(例えば、2番目のケースのステートメント)をテストします。

+1

ありがとう、if/elsif/elseブロックでこれを行いました。 – Scooby

1

whenですcaseの中でのみ有効です。elseend(それはあなたのcaseを閉じます)とそれの後に別のwhenブロック(30行目と31行目)があることを確認してください。

コードをインデントすると、エラーを見つけやすくなります(おそらく、新しいcaseを13行目に挿入してからインデントが正しいことを忘れた可能性があります)。

関連する問題