所面臨的挑戰是找到的最小整數foo
,其中:Ruby:枚舉器不能被強制轉換爲Fixnum;與項目歐拉#奮力5
foo % 1..20 == 0
我現在的嘗試是蠻力
until foo % 1.upto(20) == 0 do
foo++
end
此輸出錯誤unexpected keyword end
。但是,如果我不將end
關鍵字放入irb中,代碼永遠不會運行,因爲該塊未關閉。
我做了一個空的測試案例,看看我的錯誤奠定
until foo % 1.upto(20) == 0 do
end
這將引發新的錯誤:enumerator can't be coerced to a fixnum
。我想這意味着你不能直接在一個範圍上執行模數,並期望整個範圍的整數布爾結果。但我不知道該從哪裏出發。
我第一次嘗試的東西更高效/優雅/到了點forewent贊成嘗試蠻力如下:
foo = 1
1.upto(20) {|bar| foo *= bar unless foo % i == 0}
給出了錯誤的答案。我不明白爲什麼,但我也有興趣爲什麼
foo = 1
20.downto(1) {|bar| foo *= bar unless foo % i == 0}
輸出一個不同的答案。
編輯:我會用於循環(我用腳本編寫了ActionScript腳本)但他們不工作我期望在紅寶石。
foo ++不能像Ruby中預期的那樣工作。你需要寫foo + = 1 – OzBandit
@David:這是我最不喜歡的語言功能... – sarnold
@sarnold最不喜歡的是你希望它是在Ruby中,還是你不喜歡它在其他語言?它在Ruby中並不真正有意義(或者一般來說也可能是OO),因爲數字不可變,因此'++'會涉及隱藏的賦值。 –