【问题标题】:Ruby About loops and string equalityRuby 关于循环和字符串相等
【发布时间】:2012-07-10 04:20:40
【问题描述】:

为什么这不起作用?

puts "Hi"

x = "stop"

loop do
  a = STDIN.gets
  break if a.to_s.downcase.equal?x.to_s
end

puts "bye"

【问题讨论】:

  • 您不需要将to_s 用于a.to_sx.to_s,因为它们都是字符串,并且永远都是,即使从键盘读取也是如此。

标签: ruby loops string-evaluation


【解决方案1】:

因为gets 将包含在您输入的任何内容末尾使用的 Enter 键。

a = gets # I type in "stop"
a == "stop\n" #=> true

为了解决这个问题,chop 换行

puts "Hi"

x = "stop"

loop do
  a = STDIN.gets.chop
  break if a.to_s.downcase == x.to_s
end

puts "bye"

【讨论】:

    【解决方案2】:

    有两个原因。

    First equal? 是一种非常强的相等形式:默认情况下,它相当于比较对象 id,因此具有相同内容但不是同一个对象的两个字符串将不相等。您可能想改用==

    其次,gets 将包含您键入的换行符,您可以使用 chopchomp 删除它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多