Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如果第一次没有提供任何输入,如何重新请求用户输入?_Ruby - Fatal编程技术网

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
;所以现在
按预期工作。