2014-02-21 66 views
3

我已經創建了一個迭代Order對象數組的類方法。我使用那裏的數據來構建一個哈希。我的一個,如果迭代裏面塊是:Ruby If .. Else .. End/Increment:語法錯誤

if !(report_hash[user_id][reason]) 
    report_hash[user_id][reason] = 1 
else 
    report_hash[user_id][reason]++ 
end 

當我運行這個方法,我得到:

.rb:66 syntax error, unexpected keyword_end (SyntaxError) 

66號線是end生活在那裏。爲什麼Ruby不期望在這個塊的最後有一個結束語句?一旦一切正常,我打算將所有的條件邏輯轉換成單獨的類方法,但我一直在試圖弄清楚這一點,並且有點卡住了。

回答

6

增量法++是不是在Ruby中法律,使用+= 1代替:

if !(report_hash[user_id][reason]) 
    report_hash[user_id][reason] = 1 
else 
    report_hash[user_id][reason] += 1 
end 

有點起色(代碼大小):我會將此代碼重構爲以下內容:

report_hash[user_id][reason] ||= 1 # this will set report_hash[user_id][reason] to 1 if it is nil 
report_hash[user_id][reason] += 1 
+0

嗯,我可以發誓我擡頭看着Ruby增加,發現這個運算符。我想增加任何附加到每個用戶ID的原因關鍵字的值,所以我想像像'report_hash [user_id] [reason] + = report_hash [user_id] [reason]' –

+0

嗯我不明白你的評論@ ChrisClouten ...你可以用其他詞語嘗試嗎?也許有一個例子? – MrYoshiji

+0

所以如果report_hash [user_id] [reason]不是零,我想增加一個當前值。我認識你的例子,我認爲我剛剛在+ = 1. –

1

Ruby沒有++運算符。相反,你應該有:

report_hash[user_id][reason] += 1