String#[] Ruby 1.8.7和1.9.3之间的差异

时间:2016-08-01 22:59:54

标签: ruby

我试图升级旧的rails 2.x / ruby​​ 1.8.7应用程序,但我是 碰到一个问题。我有我的代码中的字符串\200\001\002\004\b\020 我有一些看起来像:

"\200\001\002\004\b\020"[0]

在1.8.7中,它返回Fixnum 128。然而,在ruby 1.9.3(和更新版本)中 返回字符串\x80

我的问题有两部分:第一,这里发生了什么,第二,我怎么做 得到一个类似的行为,在1.8.7版本的新版本中返回的内容 红宝石?

更新#1

有些人建议我尝试"\200\001\002\004\b\020".bytes[0],但这不起作用(虽然它确实可以在2.3.1中使用),因为它出错:

 NoMethodError: undefined method `[]' for #<Enumerator: "\x80\u0001\u0002\u0004\b\u0010":bytes>

2 个答案:

答案 0 :(得分:2)

1.8.7给出了一个字符代码。 1.9.3返回一个子字符串。

要获取旧行为,请使用"\200\001\002\004\b\020".bytes.to_a[0]

答案 1 :(得分:2)

要获取旧行为,请使用String#getbyte,如:

  

&#34; \ 200 \ 001 \ 002 \ 004 \ B \ 020&#34; .getbyte(0)