相同的字符串但不相等 - 发生了什么?

时间:2014-02-08 14:59:50

标签: ruby string

此代码:

io = StringIO.new "\xAF"
puts "\xAF".unpack('C')
puts (io.read 1).unpack('C')
puts 'Unequal' if io.read(1) != "\xAF"

打印:

175
175
Unequal

为什么两个字符串在通过StringIO时不相等?显然,它们都对应于值175,但不知何故它们并不相等。

1 个答案:

答案 0 :(得分:3)

文件对象(包括StringIO)有一个文件指针。一旦读取/写入文件,文件指针就会前进。

io = StringIO.new "\xAF"
io.read(1)
# => "\xAF"
io.read(1) # File pointer advance. reached EOF. No more character.
# => nil

如果您想重新阅读该字符,请使用seek方法:

io.seek(0) # Move to offset 0
io.read(1)
# => "\xAF"