2013-03-12 2 views
3

Похоже, что при установке Ruby-кода в исполняемый скрипт индекс String ведет себя иначе, чем в IRB, или напрямую запускает код Ruby. Например:Почему индекс строки возвращает целое значение вместо символа?

$ cat > test 
#!/usr/bin/ruby -w 
puts 'hello'[0] 
$ chmod +x test 
$ ./test 
104 
$ ruby -e "puts 'hello'[0]" 
h 

Почему это? И как заставить исполняемый скрипт вести себя так же, как «обычный» Ruby-код?

+2

Запуск другой версии рубина? – oldergod

+1

Кажется, эти два ответа сработали для вас. Вы должны принять один из них, чтобы будущие посетители этой страницы знали, какой из них лучше всего работал. (И чтобы счастливые ответчики). – vlasits

ответ

6

До 1.9, Ruby возвратил код символа ASCII для одиночных символов. 1.9+ переключился на возвращение персонажу себя:

 
irb(main):001:0> RUBY_VERSION 
=> "1.8.7" 
irb(main):002:0> 'foo'[0] 
=> 102 
 
irb(main):001:0> RUBY_VERSION 
=> "1.9.3" 
irb(main):002:0> 'foo'[0] 
=> "f" 

Использование постоянного RUBY_VERSION является хорошим способом для отладки такого рода проблемы быстро.

2

при вводе ruby, вы, вы, вы используете /usr/bin/ruby? У вас может быть другая версия ruby ​​в вашей $ PATH, которая имеет приоритет над этим.

Я не совсем уверен, что это, но я не удивлюсь, если String#[] имеет другое возвращение кастрированный баран вы используете Ruby 1.8 или 1.9

+0

Да, я только что проверил, и моя система Ruby равна 1.8.7. При использовании в моем исполняемом файле #!/Usr/bin/env ruby ​​(я использую rvm и его значение 1.9.3 в настоящее время), результат будет таким, как ожидалось. Огромное спасибо!!! – Kevin

Смежные вопросы