包括是否与其他人合作

时间:2018-07-26 19:54:29

标签: ruby if-statement

我正在做一个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

关于我需要更改的任何想法吗?

1 个答案:

答案 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

正在输出