我正在编写一些非常简单的代码,要求对文本输入进行确认,以及 我想要做的是,如果用户只需按下"输入",则将其计为"是"。例如:
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
但它非常烦人,我更理解为什么第一个不起作用,我怎样才能使它成功? |
谢谢!
答案 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