包含但不是其他的作品

Mar*_*ino 0 ruby if-statement

我做了一个Ruby botcamp.我应该编写用'th'代替's'的所有用户输入的代码,这样就像Daffy Duck所说的那样.如果我输入s,它将被替换为th.这样可行!但是,如果我不输入's',它应该打印出来,我的elsif状态中没有包含任何内容.相反,我得到错误'未定义的方法`包含?' 为零: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
Run Code Online (Sandbox Code Playgroud)

关于我需要改变什么的想法?

Sim*_*ime 8

您需要注意以感叹号(!)结尾的内置ruby方法.nil如果没有做出任何改变,他们中的很多人将会回来:

'test'.downcase! # => nil
'Test'.downcase! # => "test"
Run Code Online (Sandbox Code Playgroud)

由于您要将结果赋值给变量,因此不需要使用感叹号方法,因为那些就地修改,您可以使用常规downcase方法.

'test'.downcase # => "test"
Run Code Online (Sandbox Code Playgroud)

你后来也有一个elsif没有条件,应该只是一个else.它实际上是执行elsif条件的"主体"的第一行:

if false
  puts "a"
elsif
  puts "b" # recall that `puts` returns `nil`
  puts "c"
else
  puts "d"
end
Run Code Online (Sandbox Code Playgroud)

这导致了

b
d

正在输出