代碼審查員要求修改一段代碼,類似于:
system("grep foo /tmp/bar")
或這個:
res, err, st = Open3.capture3("grep foo /tmp/bar")
審稿人說:
只需在 Ruby 中本地讀取檔案,無需派生子命令。
為什么審閱者認為最好使用 Ruby 的本機函式,例如,File.read即使子命令呼叫中沒有不受信任的資料?
uj5u.com熱心網友回復:
最好的辦法顯然是問審稿人,而不是我們。但我可以推測。
- 呼叫子shell 效率較低、簡單明了。它需要一個額外的行程,而
File.read在當前行程中運行。 - 您的代碼現在依賴于作業系統。例如,Windows 沒有
grep命令,但File.read可以在任何運行 Ruby 的作業系統上運行。 - 乍一看,一個 subshel??l 讓我覺得發生了一些有趣的事情。如果我看到
File.read,我希望在 Ruby 代碼中出現這種情況。如果我看到一個system電話,我開始懷疑發生了一些奇怪的事情,從而使我懷疑代碼的性質。
值得一提的是,在 Ruby 中進行 grepping 仍然非常簡單。事實上,它的字面意思是grep.
File.readlines("/tmp/bar").grep(/foo/)
如果我grep在代碼審查中遇到問題中的代碼,我可能會出于上述原因標記它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478561.html
標籤:红宝石
