gpt4 book ai didi

ruby - 为什么要使用嵌套的 Ruby 模块来获取版本信息?

转载 作者:数据小太阳 更新时间:2023-10-29 07:09:30 24 4
gpt4 key购买 nike

我最近一直在查看一些 gem 的源代码。我经常看到的一个习惯用法是使用嵌套模块,其中包含连接到版本字符串中的版本常量,即围绕此类事物的变体:

module ChunkyBacon
module Version
MAJOR = 0
MINOR = 6
TINY = 2
end

VERSION = [Version::MAJOR, Version::MINOR, Version::TINY].compact * '.'
end

以这种方式存储库版本信息有什么好处(如果有的话)?为什么不这样做:

module ChunkyBacon
VERSION = '0.6.2'.freeze
end

最佳答案

在字符串中包含版本信息通常不是一个好主意。

例如,永远 不可能是 Ruby 1.10,因为太多的应用程序使用 if RUBY_VERSION > '1.6' 测试兼容性。会坏的。 (因为按字典顺序,1.10 < 1.6)这就是为什么有这个复杂的方案,其中 通常是 Ruby 1.9.x 而不是 Ruby 1.9.0-x 而 曾经是 Ruby 1.10.x 现在是 Ruby 1.9.x+1。因此,即将发布的 Ruby 版本,即 Ruby 1.9.2,看起来 像是一个不稳定的开发版本,实际上是 Ruby 1.10.1,它是一个生产版本。

这会导致很多困惑。例如,即使是许多经验丰富的 Ruby 社区领导者,仍在传播 Ruby 1.9 是开发版本的错误信息,尽管版本控制政策的变化已得到广泛传播。

Opera 网络浏览器是另一个例子。当 Opera 10.0 发布时,它最初报告的版本号是 10.0。然而,在测试期间,很明显许多网站,包括非常大和备受尊敬的网站,完全崩溃了,因为 Opera 是有史以来第一个达到 10.0 的主流浏览器,而这些网站正在做简单的字符串比较,因此认为他们正在处理不支持 JavaScript 或 CSS 的 Opera 1.0。 唯一可行的解决方案是 Opera 10.0 的最终版本打印 9.80 作为版本号。

Mark Russinovich 在 Microsoft PDC 上关于 Windows 7 内核的演讲中也对比较版本号大发雷霆。他正在向听众解释为什么 Windows 7 的版本号在早期版本中为 7,而在发布时为 6.1。原因是很多应用程序降级或根本无法工作。有些人会简单地检查 if major == 6 then enhanced_vista_mode else crappy_xp_mode这意味着它们会在 Windows 7 中运行降级。其他人甚至更具侵略性并且有类似 if major == 6 then enhanced_vista_mode elsif major == 5 then crappy_xp_mode else unsupported_windows_version 的东西。他们会拒绝工作。 (这当然很愚蠢,因为 Windows 7 完全向后兼容 Vista。)

因此,微软将版本号更改为 6.1,Russinovich 半开玩笑、半悲伤又严肃地说,这显然意味着 Windows 8 的版本号必须是 6.1.1。等等。

所以,长话短说:程序员太笨了,无法自己解析版本号,您必须帮他们做。

关于ruby - 为什么要使用嵌套的 Ruby 模块来获取版本信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2195573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com