1

私は一緒に働いていてruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux]、私は得る

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

私のコードは ruby​​ 1.8.7 で動作しますが。require "jcode"patchlevel 249で同様のメソッドが定義されていないエラーを追加する必要がある場所を見ましたeach_byte。それを追加しようとしましたが、それでも機能しません。どんな提案でも大歓迎です。

4

2 に答える 2

3

Ruby 1.8.6では、私のバックポートgemを使用できます。

require 'backports/1.8.7/string/bytes'

Ta-da、これでにアクセスできますString#bytes

また、1.8.7で導入された他の多くの変更もすべてあります。そして、1.9.1のほとんど、および今後の1.9.2のすべてなど...

于 2010-05-03T13:55:15.260 に答える
2

Ruby 1.8.6 にはありませんString#bytes。これは、1.8.7 にバックポートされた 1.9 の追加です。

次のように大まかに自分で実装できます。

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#bytes100% の契約を満たしているかどうかは確認していませんが、私の使用には十分近いです。]

于 2010-05-03T00:39:06.557 に答える