неопределенный метод "bytes" для для String в Ruby - PullRequest
1 голос
/ 03 мая 2010

Я работаю с ruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux] и получаю

undefined method `bytes' for #<String:0x2a95ec2268> (NoMethodError)

, хотя мой код работает на ruby ​​1.8.7. уровень патча 249 Я где-то видел, что нужно добавить require "jcode" для аналогичного метода не определена ошибка с each_byte. Я попытался добавить это, но это все еще не работает. Любые предложения очень ценятся.

Ответы [ 2 ]

3 голосов
/ 03 мая 2010

В Ruby 1.8.6 вы можете использовать мои backports gem:

require 'backports/1.8.7/string/bytes'

Та-да, теперь у тебя есть доступ к String#bytes.

У вас также есть все много других изменений , введенных в 1.8.7. И большая часть 1.9.1, и все последующие 1.9.2 и т. Д.

2 голосов
/ 03 мая 2010

Ruby 1.8.6 не имеет String#bytes. Это дополнение 1.9, которое было перенесено на 1.8.7.

Вы можете примерно реализовать это самостоятельно так:

class String
  require 'enumerator'

  def bytes(&block)
    return to_enum(:each_byte) unless block_given?
    each_byte &block
  end
end unless ''.respond_to?(:bytes)

[Примечание: я не проверял, действительно ли это соответствует контракту String#bytes 100%, но он достаточно близок для моего использования.]

...