这是我的代码。
removeItem
如果我的print "What's your first name"
first_name = gets.chomp.capitalize!
print "What's your last name"
last_name = gets.capitalize!.chomp
带有大写字符串(即capitalize!.chomp
),我在最后一行收到错误:
Johnson, Williams
如果我输入更多大写字母,键入全部小写,或者在undefined method `chomp' for nil:NilClass (NoMethodError)
之前使用chomp
方法,则代码运行正常。
有人可以解释这个错误吗?
答案 0 :(得分:2)
您必须仔细阅读有关这些文档的文档,以了解它们是如何工作的,因为通常会有惊喜。在这种情况下,如果未进行任何更改,capitalize!
将返回nil
。
所以你的第一个版本是正确的:
gets.chomp.capitalize!
这也是最合理的操作顺序:您应该在操作之前修剪数据。
同样值得注意的是,无论如何都要使用就地版本,因为你还是要分配一个变量:
first_name = gets.chomp.capitalize
鉴于名称的性质,无论如何,大写可能是一个糟糕的计划。 “de Lorean”怎么样?
答案 1 :(得分:2)
capitalize!
修改字符串并返回nil
个对象。因此,当您尝试将方法链接在一起时gets.capitalize!.chomp
然后capitalize!
会返回一个没有nil
方法的chomp
对象。
但是,如果您使用capitalize
代替,则该方法会返回字符串的修改副本(您可以在其上执行chomp
)。
last_name = gets.capitalize.chomp