Этот вызов sprintf не работает в 1.9.2? - PullRequest
2 голосов
/ 01 января 2011

В нижней части документации Kernel # sprintf он имеет следующий пример:

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

Когда я делаю это на 1.8.7, я получаю такой результат:

"..18446744073709551493"

Это похоже на ожидаемый результат, но определенно не так.

Однако, когда я делаю это на 1.9.2, я получаю то же число, что и строка:

ruby-1.9.2-p136 :001 > sprintf("%u", -123)
 => "-123"

Итак, на самом деле здесь два вопроса.

  1. Почему я получаю вывод, отличный от того, о котором говорится в документации, и

  2. Почему Ruby 1.9.2 ведет себя иначе, чем 1.8.7,даже если документация достаточно конкретна относительно типа вывода?

1 Ответ

5 голосов
/ 01 января 2011

Документация 1.8 говорит, что %u для 32-разрядного целого числа без знака, а вы видите его для 64-разрядного целого числа без знака, так что поведение отключено. Документация 1.9 гласит, что %u совпадает с %d, так что поведение правильное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...