我的代碼發生任意的位,需要紅寶石> = 2.1.0。我想在運行時測試是否滿足這個要求。什麼是正確的做法?如何檢查運行時是否存在最低Ruby版本?
我看着Rails codebase,他們使用一個簡單的字符串比較是這樣的:
RUBY_VERSION >= "2.1.0"
但就是不容易出錯的版本號的字符串比較?如果某些未來的Ruby版本是「10.0.0」,那麼這不會返回錯誤的結果嗎?
我的代碼發生任意的位,需要紅寶石> = 2.1.0。我想在運行時測試是否滿足這個要求。什麼是正確的做法?如何檢查運行時是否存在最低Ruby版本?
我看着Rails codebase,他們使用一個簡單的字符串比較是這樣的:
RUBY_VERSION >= "2.1.0"
但就是不容易出錯的版本號的字符串比較?如果某些未來的Ruby版本是「10.0.0」,那麼這不會返回錯誤的結果嗎?
良好的通知,看來你已經找到可能的錯誤,無論是下降了一張字條給rails issue tracker或自己打補丁並進行拉請求。
有小而簡單Versionomy寶石比較正確版本。
確實,這是一個錯誤。這是一個常見的錯誤,僅僅因爲這個原因,版本編號方案發生了變化,Ruby 1.10.0作爲Ruby 1.9.1發佈。 –
@JörgWMittag這是吉祥物錯誤什麼的,爲什麼沒有他們解決了這個問題了嗎? –
這是開發者頭腦中的一個錯誤,你不能解決這個問題。對於像Matt這樣的每個開發者來說,他認識到簡單的字符串比較是錯誤的,還有100個誰不會。這個決定是在發佈Ruby 1.10和「打破」數千個腳本(儘管從技術上講它是腳本被破壞)或者改變版本編號方案併發布Ruby 1.9.1之間做出的。這與微軟發佈Windows 7的版本號爲6.1的原因類似:是的,所有檢查主數字== 6的應用程序都是錯誤的,但試圖向最終用戶解釋,他們*看到的所有*是「Windows 7打破了...... –
到底爲什麼它需要2.1?通常最好測試一下特性(例如用各種'* defined?'方法)而不是版本。 – cremno
您也可以使用'寶石:: Version.new(RUBY_VERSION)> =寶石:: Version.new( '2.1.0')''因爲是rubygems'默認需要。 – cremno
@cremno我正在使用優化,直到2.1才完成。 –