为什么 Ruby 中的用户输入与代码中已有的给定字符串不同?

Why is user input in Ruby different from a given string already inside the code?

我的 Ruby 程序在名为 func1 的函数中计算字符串。它在运行时要求用户输入。字符串比较if语句 无论如何都不适用于用户输入。我可以交互式地输入应该与程序定义的变量常量相同的字符串。但是该函数对这两个字符串的解释不同。我添加了额外的调试步骤来验证字符串是否正确。但我仍然不明白为什么 func1 看到用户输入的方式与我作为人类看到输入的方式不同。我希望 func1 接收用户输入的字符串 foobar 并识别它。这不是正在发生的事情。我做错了什么?

这是我的 Ruby 程序:

def func1(x)
    if x == 'foobar' then
      print "you gave this function foobar"
      puts " "
    else
      print "you did NOT give this function foobar"
    end
end

def prompt(*args)
    print("Enter a string: ")
    coolstring = gets
    return coolstring
end

func1("foobar")
y = prompt
print(y)
func1(y)

下面是一些输出,显示我输入了字符串“foobar”:

you gave this function foobar

Enter a string: foobar

foobar

you did NOT give this function foobar

当您调用 gets 时,结束输入的换行符存储在变量中:

pry(main)> gets
qwe
# => "qwe\n"

要删除它,请使用 String#chomp。它从字符串的末尾删除分隔符(默认为换行符):

pry(main)> a = gets
asd
#=> "asd\n"
pry(main)> a.chomp
#=> "asd"

在你的情况下:

def prompt(*args)
    print("Enter a string: ")
    coolstring = gets.chomp # <<<<<<<<<<<< here
    return coolstring
end