我目前的代码是:
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键时,我得到“你输入了一个字符串,但它没有''字母”,而不是“你没有输入任何东西”我想要的。
答案 0 :(得分:3)
除false
和nil
之外的所有对象如果用作谓词,则会被视为false
。即使空字符串也被视为true
:
s = ""
puts true if s # => true
使用String#empty?
检查它是否为空字符串。
答案 1 :(得分:2)
正如你所说当我运行它时,我会收到提示输入,然后当我输入无输入时按Enter键 - 这意味着实际发生的事情是
input_value="\n".chomp #( you gets methods take only `\n` as input)
"\n".chomp # => ""
所以你的input_value
变量保持并且空字符串对象。 现在在Ruby中,每个对象都有true
值,nil
和false
除外。 表示""
也是如此,但你做了!input_value
,这意味着你明确地将它false
。这就是下面if-else
块中的原因, else 部分已被执行,而您没有看到预期输出“您没有输入任何内容”。
if !input_value
print "you didn't type anything"
else
input_value.downcase!
if input_value.include? "s"
#.. rest code.
因此我建议您在这样的上下文中将行if !input_value
替换为if input_value.empty?
,这将使您的代码按照您的预期行事。我没有把你的逻辑作为一个整体,但试图告诉你如何编码以满足你的需求:
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$