为什么一个解决方案在另一个解决方案打印为false时会打印true



我有两种解决方案可以反向Ruby中的字符串。一个打印为真,另一个打印为false,两者都打印出我想要的响应。

为什么有人说这是错误的,即使它与打印true的解决方案产生了相同的答案?

这是解决方案和测试:

def reverse(string)
new = ""
  i = 0
  length = string.length
  while i < length do 
    new = new.to_s + string[-1, 1].to_s
    string.chop!
    if i >= string.length
      break
    end
  end
  puts new
end
def secondreverse(string)
  new = ""
  i = 0
  length = string.length
  while i < length do
    new = string[i] + new
    i += 1
  end
  return new
end

这些是检查代码是否正常工作的测试。写下您的解决方案后,他们都应该打印成真。

puts("nTests for #reverse")
puts("===============================================")
    puts(
      'secondreverse("abc") == "cba": ' + (secondreverse("abc") == "cba").to_s
    )
    puts(
      'secondreverse("a") == "a": ' + (secondreverse("a") == "a").to_s
    )
    puts(
      'secondreverse("") == "": ' + (secondreverse("") == "").to_s
    )
puts("===============================================")

在您的 #reverse函数中,当您应该返回new时,您将返回puts new

从下面的示例中可以看到,puts在打印到屏幕后返回零:

irb(main): puts 'test'
test
=> nil

如果将puts new更改为new,则可以按照您的期望工作。

旁边

您不需要使用明确的return调用。在Ruby中,执行的最后一行将返回,因此您可以在这两种方法中替换它:

return new

with:

new

问题是在reverse方法中,您使用puts方法打印了stdout的值,但您没有返回(您的方法返回nil(。比较nil == "cba"时,它返回false。您必须返回new变量:

def reverse(string)
  new = ""
  i = 0
  length = string.length
  while i < length do 
    new = new.to_s + string[-1, 1].to_s
    string.chop!
    if i >= string.length
      break
    end
  end
  new
end

相关内容

  • 没有找到相关文章

最新更新