输入时没有输入作为有效布尔值

时间:2018-05-01 12:05:19

标签: ruby

我正在编写一些非常简单的代码,要求对文本输入进行确认,以及 我想要做的是,如果用户只需按下"输入",则将其计为"是"。例如:

define method
        puts "enter some text"
        @text= gets.chomp
        puts "you entered '#{@text}', is it correct?"
        correct = gets.chomp    
             if correct == 'y' || ''
             other_method
             else
             method
        end
end

但是当我在Ruby上运行它时,我会在条件"中得到"警告,文字字符串,无论你输入什么,都会调用" other_method"。我找到的解决方案如下:

define method
        puts "enter some text"
        @text= gets.chomp
        puts "you entered '#{@text}', is it correct?"
        correct = gets.chomp    
             if correct == 'y'
             other_method
             elsif correct == ''
             other_method
             else
             method
        end
end

但它非常烦人,我更理解为什么第一个不起作用,我怎样才能使它成功? |

谢谢!

3 个答案:

答案 0 :(得分:4)

错误的含义是您自己在条件语句中提供字符串(文字)。当你if correct == "y" || ""实际告诉它if correct == "y"""时,只提供字符串不是一个条件。

要解决此问题,您只需在操作员之后以及之前提供条件。 Ruby并不认为您希望在||之后发生同样的事情。

像这样:

define method
        puts "enter some text"
        @text= gets.chomp
        puts "you entered '#{@text}', is it correct?"
        correct = gets.chomp    
             if correct == 'y' || correct == ''
             other_method
             else
             method
        end
end

希望这会有所帮助。快乐的编码

答案 1 :(得分:3)

这里的解决方案是使用Ruby非常通用的case语句来设置一些" case"你想测试:

puts "you entered '#{@text}', is it correct?"

case (gets.chomp)
when 'y', 'yes', ''
  method_a
else
  method_b
end

这可以扩展为使用正则表达式以实现更多功能:

case (gets.chomp)
when /\A\s*y(?:es)?\s*\z/i
  method_a
else
  method_b
end

现在,"y""yes""Yes "之类的内容可行。

当你有大量if语句都在测试同一个变量时,请考虑使用case语句来简化逻辑。

答案 2 :(得分:2)

以下是使用正则表达式Docs)的其他选项:

puts "enter some text"
@text= gets.chomp
puts "you entered '#{@text}', is it correct?"
correct = gets.chomp
if /^y?$/ =~ correct      # This will match 'y' and empty string both
  other_method
else
  method
end