Ruby 如果第一次没有提供任何输入,如何重新请求用户输入?
我目前的代码是:Ruby 如果第一次没有提供任何输入,如何重新请求用户输入?,ruby,Ruby,我目前的代码是: print "Feed me input." def get_input input_value=gets.chomp if !input_value print "you didn't type anything" else input_value.downcase! if input_value.include? "s" input_value.gsub!(/s/,"th") else
print "Feed me input."
def get_input
input_value=gets.chomp
if !input_value
print "you didn't type anything"
else
input_value.downcase!
if input_value.include? "s"
input_value.gsub!(/s/,"th")
else
print "You entered a string but it had no 's' letters."
end
end
return input_value
end
get_input()
if !get_input
get_input
else
puts "#{get_input}"
end
我不知道为什么它不起作用。当我运行它时,会提示我输入,然后当我在输入无后按enter键时,我得到的是“您输入了一个字符串,但它没有字母”,而不是我想要的“您没有键入任何内容” 正如您所说,当我运行它时,会提示我输入,然后当我在输入“无”后按enter键时,这意味着实际发生的情况是
input_value="\n".chomp #( you gets methods take only `\n` as input)
"\n".chomp # => ""
因此,您的输入值
变量保持空字符串对象现在在Ruby中,每个对象都有true
值,除了nil
和false
说“
也是真的,但是你做到了!输入_值
,这意味着您显式地将其设置为false。这就是下面if else
块中的原因,else部分已经执行,您没有看到预期的输出“您没有键入任何内容”
if !input_value
print "you didn't type anything"
else
input_value.downcase!
if input_value.include? "s"
#.. rest code.
因此,我建议您在这种情况下,如果!如果输入值为空?,则将值输入到,这将使代码按预期运行。我没有将您的逻辑作为一个整体,但尝试向您展示如何编写代码以满足您的需求:
print "Feed me input."
def get_input
input_value=gets.chomp
if input_value.empty?
puts "you didn't type anything"
false
else
puts "found value"
input_value.downcase!
end
end
until input = get_input
# code
end
puts input
输出
kirti@kirti-Aspire-5733Z:~/Ruby$ ruby test.rb
Feed me input.
you didn't type anything
you didn't type anything
you didn't type anything
HH
found value
hh
kirti@kirti-Aspire-5733Z:~/Ruby$
正如您所说,当我运行它时,我会收到输入提示,然后当我在输入“无”后按enter键时,这意味着实际发生的情况是
input_value="\n".chomp #( you gets methods take only `\n` as input)
"\n".chomp # => ""
因此,您的输入值
变量保持空字符串对象现在在Ruby中,每个对象都有true
值,除了nil
和false
说“
也是真的,但是你做到了!输入_值
,这意味着您显式地将其设置为
false。这就是下面if else
块中的原因,else部分已经执行,您没有看到预期的输出“您没有键入任何内容”
if !input_value
print "you didn't type anything"
else
input_value.downcase!
if input_value.include? "s"
#.. rest code.
因此,我建议您在这种情况下,如果!如果输入值为空?,则将值输入到,这将使代码按预期运行。我没有将您的逻辑作为一个整体,但尝试向您展示如何编写代码以满足您的需求:
print "Feed me input."
def get_input
input_value=gets.chomp
if input_value.empty?
puts "you didn't type anything"
false
else
puts "found value"
input_value.downcase!
end
end
until input = get_input
# code
end
puts input
输出
kirti@kirti-Aspire-5733Z:~/Ruby$ ruby test.rb
Feed me input.
you didn't type anything
you didn't type anything
you didn't type anything
HH
found value
hh
kirti@kirti-Aspire-5733Z:~/Ruby$
除了false
和nil
之外的每个对象如果用作谓词,则被视为false
。即使是空字符串也被视为true
:
s = ""
puts true if s # => true
用于检查它是否为空字符串。除了false
和nil
之外的每个对象如果用作谓词,则被视为false
。即使是空字符串也被视为true
:
s = ""
puts true if s # => true
用于检查它是否为空字符串。我尝试替换的所有实例!获取您的输入和!分别使用input_value=“/n”和get_input=“/n”输入_值,但结果与之前相同。我尝试替换!输入_值和!获取输入值为空的输入?并获取_输入。空?。现在我被告知我什么都没打。然后,系统会提示我再次键入一些内容,然后键入“s”,希望它将“s”替换为“th”,但它不起作用。程序刚刚停止(没有错误)。@macsplean现在查看我是否可以完全帮助您。谢谢,我感谢您的帮助。我已尝试替换的所有实例!获取您的输入和!分别使用input_value=“/n”和get_input=“/n”输入_值,但结果与之前相同。我尝试替换!输入_值和!获取输入值为空的输入?并获取_输入。空?。现在我被告知我什么都没打。然后,系统会提示我再次键入一些内容,然后键入“s”,希望它将“s”替换为“th”,但它不起作用。程序刚刚停止(没有错误)。@macsplean现在看看我是否能完全帮助你。谢谢,我感谢你的帮助。所以我更换了!输入_值和!获取字符串为空的输入?。现在代码告诉我,无论我做什么,我都没有键入任何内容。@macsplean,替换if!使用if input\u value.empty?
@macsplean输入\u value
,在代码中,我修改了get\u input
以在有效时返回修改后的输入(包含s
),或返回nil
。并且没有使用“{get\u input}”
,因为它再次调用get\u input
。您介意解释一下底部的while循环吗?我对不太熟悉!(line=get\u input)
end
将line
格式放入。@macsplean,它调用get\u input
,然后将函数的结果值分配给line
。返回值为String
对象或nil
;所以现在代码>按预期工作。所以我更换了!输入_值和!获取字符串为空的输入?。现在代码告诉我,无论我做什么,我都没有键入任何内容。@macsplean,替换if!使用if input\u value.empty?
@macsplean输入\u value
,在代码中,我修改了get\u input
以在有效时返回修改后的输入(包含s
),或返回nil
。并且没有使用“{get\u input}”
,因为它再次调用get\u input
。您介意解释一下底部的while循环吗?我对不太熟悉!(line=get\u input)
end
将line
格式放入。@macsplean,它调用get\u input
,然后将函数的结果值分配给line
。返回值为String
对象或nil
;所以现在代码>按预期工作。