Kernel#sprintf文档的底部有一个示例:

sprintf("%u", -123) #=> "..4294967173"

当我在1.8.7上执行此操作时,会得到以下结果:
"..18446744073709551493"

这与预期的产出相似,但绝对不是。
但是,当我在1.9.2上执行此操作时,会得到与字符串相同的数字:
ruby-1.9.2-p136 :001 > sprintf("%u", -123)
 => "-123"

所以实际上这里有两个问题。
为什么我会得到一个与文档中所说的不同的输出
为什么Ruby1.9.2的行为会与1.8.7不同,即使文档对输出类型非常具体?

最佳答案

1.8 documentation表示%u用于32位无符号整数,而您在64位无符号整数上看到它,所以该行为是关闭的。1.9 documentation表示%u%d相同,因此该行为是正确的。

关于ruby - 这个sprintf调用是否在1.9.2中中断?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4572975/

10-13 04:43