2013-03-14 28 views
0

有沒有人有一個想法,爲什麼這個腳本不工作?

def multiples_three (n) 
    i=1 
    while i<n 
     if i%3==0 
      print "#{i}" 
      i=i+1 
     elsif 
      i=i+1 
end 

它返回:

syntax error, unexpected $end, expecting keyword_end 
+0

Ruby不是Python。如下所述,你錯過了'if'塊的結束'end'語句。另外,在風格上,Ruby代碼使用兩個空格來縮進,而不是四個或八個,絕對不是製表符。如果你的代碼永遠不會傳遞給另一個開發者,那麼你可以逃脫另一個標準,但是如果你沒有在我工作的團隊中遵循這個標準,那麼你會很快聽到它的聲音,之後立刻就會發出咆哮聲和gnashing聲牙齒。 – 2013-03-14 14:04:37

+0

沒有條件的elsif也是一個問題 – DGM 2013-03-14 14:56:58

回答

2

你缺少兩個 「結束」 語句。

一爲「如果」

另一個爲「而」

+0

非常感謝!事實上,我嘗試了兩個「結束」,但這一個需要三個,我完全錯過了def的結局! – user2170092 2013-03-14 13:58:27

2

你缺少一個右結束

def multiples_three (n) 
    i=1 
    while i<n 
     if i%3==0 
      print "#{i}" 
      i=i+1 
     elsif 
      i=i+1 
     end #<--- needed 
    end #<--- also needed 
end 
3

看起來你缺少一對夫婦的「結束」 S在那裏。

def multiples_three (n) 
    i=1 
    while i<n 
     if i%3==0 
      print "#{i}" 
      i=i+1 
     elsif 
      i=i+1 
     end 
    end 
end 
1

正如其他人所說的,你錯過了一些目標...並且沒有條件的裸露的elsif讓我感到困惑;如果你實際上沒有測試某些東西,你需要別的東西。

至於造型,你應該在Ruby中使用兩個空格:

def multiples_three(n) 
    i=1 
    while i<n 
    if i % 3 == 0 
     print i # no need to put in string and interpolate if it is by itself 
     i=i+1 
    else 
     i=i+1 
    end 
    end 
end 

但是更多的紅寶石的方式來做到這一點,woud是我們的迭代器,範圍和返回數組值,而不是直接從印刷的功能:

def multiples_three(n) 
    (1..n).select{|i| i % 3==0 } 
end 

puts multiples_three(12).join("\n") 
3 
6 
9 
12 
=> nil 

事實上,紅寶石使這麼簡單,我甚至不會寫這個函數。