【问题标题】:Identical strings but not equal - what's going on?相同的字符串但不相等 - 这是怎么回事?
【发布时间】:2024-05-18 11:00:02
【问题描述】:

这段代码:

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,但不知何故,它们并不相等。

【问题讨论】:

  • 您从io 阅读了两次。第二次读取返回 nil。

标签: ruby string


【解决方案1】:

文件对象(包括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"

【讨论】:

  • 是的。正是这个..你比我快 2 秒
  • 叹息..我完全忘记了!当然。谢谢大家!