2012-05-08 3 views
3

Ruby noob, только что получил и установил RubyMotion, создал мою первую программу, и у меня возникли проблемы с приложением приложения Time (sample).sprintf сломан в RubyMotion

Всякий раз, когда я пытаюсь форматировать строку, используя либо спринт, либо другую форму (извините, не знаю имя), я просто возвращаю строку своего формата.

т.е. (из консоли в то время как мое приложение работает в симуляторе)

Build ./build/iPhoneSimulator-5.1-Development 
Simulate ./build/iPhoneSimulator-5.1-Development/Timer.app 
(main)>> @time = 0.1 
=> 0.0999999940395355 
(main)>> string = sprintf("%.1f", @time) 
=> "%.1f" 
(main)>> string 
=> "%.1f" 
(main)>> "%.1f" % @time 
=> "%.1f" 
(main)>> 

Тот же результат в реальном приложении в тренажере.

У меня есть рубин по умолчанию, установленный на моем Mac, но если я попробую запустить тестовый рубиновый файл (напечатайте «% 05d»% 123), я получаю ожидаемые результаты.

/usr/bin/ruby -v 
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0] 
/Library/RubyMotion/bin/ruby -v 
MacRuby 0.12 (ruby 1.9.2) [universal-darwin11.0, i386] 

Выполняется на льве 10.7.3, любые советы или идеи оцениваются.

Спасибо.

+0

Это, кажется, ошибка с RubyMotion; и метод 'NSString.stringWithFormat' также не работает должным образом (' NSString.stringWithFormat ("% 0.1f", 0.1) 'возвращает' "0.0" '). Я подаю билет поддержки. –

+0

Кроме того, я думаю, что это был регресс с RubyMotion 1.1 или 1.2; когда я запускал пример приложения Locations в 1.0, он отображал координаты просто отлично, но теперь его запускает только «% 0,3f,% 0,3f» на экране. Существует также [проблема, открытая в Github] (https://github.com/HipByte/RubyMotionSamples/issues/4) для этого –

+0

Исправлено. 'sudo motion update', чтобы получить обновление. –

ответ

1

С 5/9/12 это исправлено. Убедитесь, что вы на RubyMotion 1.3 (запустите sudo motion update), и форматирование строк снова будет работать.

Обновление 5/8/12: Confirmed bug, должно быть исправлено сегодня вечером или завтра.

В моих комментариях выше есть определенная ошибка. Некрасиво хак, чтобы получить эту работу может быть что-то вроде этого (так как %d все еще работает отлично для sprintf):

@time = 0.1 
sprintf("%d", (@time * 10).round).insert(-2, '.') 
+0

Я запустил «обновление судо-движения» этого AM, он обновил RubyMotion до 1.3, снова выполнил мой тест, кажется, что все работает нормально. –