2013-01-17 99 views
3

使用下面的代碼在Ruby中循環:紅寶石而內if語句

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 

我得到一個「意外keyword_end」爲第二屆「結束」的聲明。如果我刪除while循環,代碼就會正常運行。有任何想法嗎?

+4

Ruby中沒有'i ++'。 –

+0

我很想知道爲什麼這個問題被低估了,這樣我就不會在未來犯同樣的錯誤? – JohnGalt

回答

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 

i++句法不會紅寶石

+0

可能是因爲Ruby中沒有這樣的東西:p –

+0

是的,我的壞,謝謝! – JohnGalt

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 
0

唯一錯誤的是i++。我可能會建議遷移從風格有點類似C到規範,紅寶石,但是這只是個人的選擇...

if (13..23) === tickFormat.length 
    i = 1 
    while i < tickFormat.length 
    if i % 2 != 0 
     tickFormat.at(i)[1] = '' 
    end 
    i += 1 
    end 
end 
1

Ruby有太多的糖編寫它的C風格:)

嘗試類似

if tickFormat.length.between?(13,23) 
    (1..tickFormat.length).step(2) do |i| 
    tickFormat.at(i)[1] = '' 
    end 
end 
3

您從C角落顯然是那麼從我身邊一些額外的信息:

首先我想引用Alexey Anufriyev

我認爲你應該使用你的平臺採用的命名約定。 underscore_case在C#代碼中看起來很奇怪,因爲Ruby中的camelCase =)

所以你應該考慮使用下劃線表示法。

此外,你的代碼是漂亮的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 
+0

優秀的回覆! – akuhn