我們的團隊維護了一個 ruby?? 腳本,它必須支持任何 ruby?? >= 1.9.3(是的,這是一個非常舊的 ruby?? 版本,但目前這是我們無法控制的)。最近,我們添加了一項更改,其中包括使用match?正則運算式的驗證,并且一切順利,直到一位用戶報告該腳本在 ruby?? 2.3 中爆炸并顯示以下訊息:
undefined method `match?' for #<Regexp:0x000000018471e0> (NoMethodError)
事實證明這match?是因為該方法在 ruby?? >= 2.4 中可用。
我們一直在運行ruby -c script.rb多個版本的 ruby??(1.9.3、2.0.0、2.1.10、2.3.7、2.5.1、2.6.3、2.7.4)作為我們測驗套件的一部分,但沒有顯示作為語法錯誤,我懷疑這是因為實際語法是“正確的”,但該方法在某些版本的 ruby?? 中根本不可用。我們還嘗試了rubocop,希望它能檢測到這些不兼容問題,但它也沒有報告任何錯誤。
所以,我的問題是,檢查多個 ruby?? 版本之間的 API 兼容性問題的最佳方法是什么?
uj5u.com熱心網友回復:
ruby -c使用您支持的最舊的 Ruby運行是一個好的開始,因為它會檢測您是否正在嘗試使用較新的語法。
對于使用新方法:
在您想要支持的最舊和最新 Ruby 版本中運行您的測驗套件。
考慮使用我的
backportsgem使即使在舊的 Ruby 上也可以使用更新的 API。例如,它包括Regexp.match?數百個向后移植......
uj5u.com熱心網友回復:
你有自動化測驗套件嗎?如果是這樣,您可以設定您的 CI 以針對多個 Ruby 版本進行測驗,例如:
https://github.com/actions/setup-ruby#usage
(編輯:我看到您確實提到了一個測驗套件,所以聽起來您的測驗覆寫率存在差距,或者您沒有針對每個 Ruby 版本運行測驗?)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389771.html
