在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/