首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用chomp链接时出错

用chomp链接时出错
EN

Stack Overflow用户
提问于 2013-12-27 11:22:36
回答 2查看 599关注 0票数 2

我编写了一个小程序如下

代码语言:javascript
复制
print "Your string = "
input = gets.chomp.downcase!

if input.include? "s"
   puts "Go yourself!"
end

但我得到了错误

未定义的方法“包括?”0:NilClass (NoMethodError)

如果我删除感叹号(!)停机后,程序将正常运行。

我不明白原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

举一个例子来证明-

代码语言:javascript
复制
>> s = "abc"
>> p s.downcase
"abc"
>> p s.downcase!
nil

现在,nil是类NilClass的一个实例,它没有名为#include?的实例方法。所以你有no method error了。这是显而易见的。

代码语言:javascript
复制
>> nil.respond_to?(:downcase)
false
>> nil.respond_to?(:downcase!)
false
>> s.respond_to?(:downcase!)
true
>> s.respond_to?(:downcase)
true
票数 3
EN

Stack Overflow用户

发布于 2013-12-27 11:29:11

不要使用downcase!,因为如果没有对字符串进行更改,它可以返回nil

因此,正确的代码是:

代码语言:javascript
复制
print "Your string = "
input = gets.chomp.downcase

if input.include? "s"
   puts "Go yourself!"
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20799818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档