當加載文件,我以前做的一些變種:短替代三元和救援修飾形式
first_file = "#{__dir__}/first_file.txt"
first_data = File.exist?(first_file) ? File.readlines(first_file) : []
second_file = "#{__dir__}/second_file.yaml"
second_data = File.exist?(second_file) ? YAML.load_file(second_file) : {}
總是坐着有點不對勁了我。需要檢查,看看文件是否存在,需要在那裏,但我真正關心的是後來的事情。
最後,我發現在線rescue
,並開始做這樣的:
first_file = "#{__dir__}/first_file.txt"
first_data = File.readlines(firs_file) rescue []
second_file = "#{__dir__}/second_file.yaml"
second_data = YAML.load_file(second_file) rescue {}
這對我來說是這樣清晰的 - 嘗試這個東西你真的想,如果你不能做到這一點其他的事情,正是你想要的回退。它比三元組更短,更清晰。
但是,無論在哪裏,我都會重複一遍avoid rescue
in modifier form。我明白這是爲什麼:它可以隱藏我們沒有預測到的錯誤。
如果我可以定義Errno::ENOENT
作爲從內聯形式到rescue
的錯誤,我會的。但據我所知,內聯rescue
無法指定要從中解救出什麼錯誤。
那麼選擇是什麼?我可以做什麼,如同內嵌rescue
一樣簡短明瞭,但沒有缺點?
回到你的老路。 – sawa
我同意塞爾吉奧,聰明的一個內襯很多時候都不那麼可讀。只需創建一些輔助方法。 –
我想我很清楚爲什麼我不想回到舊的方式。如果唯一的論點是「回到舊的方式」,不妨堅持新的。 – user137369