我正在做一个Ruby botcamp。我应该编写代码,用“ th”替换所有用户输入的“ s”,这样看起来就像达菲鸭在说话。如果我输入s,它将被替换为th。这样可行!但是,如果我不输入's',则应该打印出没有包含在elsif statemnt中。相反,我得到了错误“未定义的方法”包括?”。对于nil:NilClass'。除了那个错误,解释器告诉我代码是好的。
print "Input a string: "
user_input=gets.chomp.downcase!
if user_input.include?"s"
user_input.gsub!(/s/, "th")
puts "Your string is #{user_input}!"
elsif
puts "There are no s's in your string!"
end
关于我需要更改的任何想法吗?
答案 0 :(得分:8)
您需要小心以惊叹号(!
)结尾的内置红宝石方法。如果未进行任何更改,其中许多将返回nil
:
'test'.downcase! # => nil
'Test'.downcase! # => "test"
由于您将结果分配给变量,因此无需使用感叹号方法,因为这些方法是就地修改的,因此您可以仅使用常规的downcase
方法。
'test'.downcase # => "test"
您稍后还会拥有一个无条件的elsif
,它应该可能只是else
。它实际上是根据条件执行elsif
的“ body”的第一行:
if false
puts "a"
elsif
puts "b" # recall that `puts` returns `nil`
puts "c"
else
puts "d"
end
这将导致
b
d
正在输出