3

Ruby で次のコードを使用します。

if (tickFormat.length > 12 && tickFormat.length < 24)
    i = 1
    while(i < tickFormat.length) do
        if (i%2 != 0)
          tickFormat.at(i)[1] = ''
        end
        i++
    end
end

2 番目の "end" ステートメントで "unexpected keyword_end" が返されます。while ループを削除すると、コードはエラーなしで実行されます。何か案は?

4

5 に答える 5

3

これを試して:

if (tickFormat.length > 12 && tickFormat.length < 24)
  i = 1
  while(i < tickFormat.length) do
    if (i%2 != 0)
      tickFormat.at(i)[1] = ''
    end
    i += 1
  end
end

構文が Rubyでi++機能しない

于 2013-01-17T18:40:02.287 に答える
3

あなたは明らかにCコーナーから来たので、私の側からの追加情報:

まず、アレクセイ・アヌフリエフを引用したいと思います

プラットフォームで採用されている命名規則を使用する必要があると思います。Ruby の camelCase のように、underscore_case は C# コードでは奇妙に見えます =)

したがって、アンダースコア表記の使用を検討する必要があります。

また、コードはかなりCスタイルです。これはもう少し Ruby 風です (同じ行に短い文を書くかどうかは好みの問題ですが):

if tick_format.length === (13..23)
  tick_format.each_with_index do |tf, i|
    tf[1] = '' if i.odd?
  end
end

# if you use active support's core extensions (which is recommended imho)
# you can rewrite line 1 as:
if tick_format.length.in? 13..23
于 2013-01-17T19:30:23.017 に答える
1

Ruby has too much sugar to code it C-style :)

Try something like

if tickFormat.length.between?(13,23)
  (1..tickFormat.length).step(2) do |i|
    tickFormat.at(i)[1] = ''
  end
end
于 2013-01-17T18:53:15.930 に答える
0

i+=1 を使用してインクリメントします。

if tickFormat.length > 12 && tickFormat.length < 24
        i = 1
        while i < tickFormat.length do
            if (i%2 != 0)
              tickFormat.at(i)[1] = ''
            end
            i+=1
        end
    end
于 2013-01-17T18:43:49.130 に答える
0

唯一間違っているのはi++. スタイルを C ライクから正規の Ruby に少し移行することを提案するかもしれませんが、それは単なる個人的な選択です...

if (13..23) === tickFormat.length
  i = 1
  while i < tickFormat.length
    if i % 2 != 0
      tickFormat.at(i)[1] = ''
    end
    i += 1
  end
end
于 2013-01-17T18:44:25.867 に答える