我编写了一个小程序如下
print "Your string = "
input = gets.chomp.downcase!
if input.include? "s"
puts "Go yourself!"
end但我得到了错误
未定义的方法“包括?”0:NilClass (NoMethodError)
如果我删除感叹号(!)停机后,程序将正常运行。
我不明白原因。
发布于 2013-12-27 11:23:38
如果字符串已经在大小写中,String#downcase!将为您提供nil。所以使用String#downcase,它是安全的。我确信,您从命令行传递给了方法gets,该字符串已经被大小写化。将行input = gets.chomp.downcase!替换为input = gets.chomp.downcase。现在你安全了。
String#downcase
返回str的副本,并将所有大写字母替换为小写对应。如果接收方字符串对象已被降大小写,则将返回接收方。
String#downcase!
减少str的内容,如果不做任何更改,则返回nil。
举一个例子来证明-
>> s = "abc"
>> p s.downcase
"abc"
>> p s.downcase!
nil现在,nil是类NilClass的一个实例,它没有名为#include?的实例方法。所以你有no method error了。这是显而易见的。
>> nil.respond_to?(:downcase)
false
>> nil.respond_to?(:downcase!)
false
>> s.respond_to?(:downcase!)
true
>> s.respond_to?(:downcase)
true发布于 2013-12-27 11:29:11
不要使用downcase!,因为如果没有对字符串进行更改,它可以返回nil。
因此,正确的代码是:
print "Your string = "
input = gets.chomp.downcase
if input.include? "s"
puts "Go yourself!"
endhttps://stackoverflow.com/questions/20799818
复制相似问题