2012-06-20 45 views
3

在一行中寫這樣的東西的好方法是什麼?目標是在信息級別記錄消息,如果該值在調試模式下爲零,並且顯示正確的消息。看起來很簡單,但爲這樣的小東西編寫5行代碼讓我煩惱不已。我可以用方法來包裝它,但是如果可以的話,我會盡量避免。謝謝。在同一行寫這個紅寶石代碼的最佳方式

if value.nil? 
    Rails.logger.info "value: nil" 
else 
    Rails.logger.debug "value: #{value.inspect}" 
end 
+2

你在代碼中寫了多少次?如果答案是N> = 2,爲它創建一個方法'log_values(value)',問題就解決了! – tokland

+0

紅寶石的首選樣式是創建方法。不要回避它,擁抱它。 – DGM

+0

:)好的。擁抱它。 –

回答

8
value.nil? ? (Rails.logger.info "value: nil") : (Rails.logger.debug "value: #{value.inspect}") 

的另一種方式,你可以嘗試(這是不一樣的,但類似):

Rails.logger.send (value.nil? ? :info : :debug), "value: #{value.inspect}" 

但我認爲最好的辦法是給你寫自己的記錄儀,自動決定哪些其中流量被寫入變量:

NullLogger.log value 
+1

+1發送'版本 – Phrogz

+1

沒關係,但是那種代碼可能會附帶一條註釋:「可以完成,但是您確定要編寫這個混亂」?儘管這個特定的片段並不是一團糟,而是獲得批准。 – tokland

0
value.nil? ? Rails.logger.info "value: nil" : Rails.logger.debug "value: #{value.inspect}" 
+0

它不應該是'value.nil? == true'? 此外,布爾比較是相當冗長,但不是一個真正的問題。 –

+0

是的。這是一個比較。同意 –

0
value ? Rails.logger.debug("value: #{value.inspect}") : Rails.logger.info("value: nil") 
+0

如果'value'爲'false',則將採用'nil'條件。如果用戶想區分它們,最好使用'value.nil?'。 –

0

如果你想在同一行,只是刪除換行符:

if value.nil? then Rails.logger.info "value: nil" else Rails.logger.debug "value: #{value.inspect}" end 

可是爲什麼,爲什麼,會有人想這樣做嗎?