方法顺序和NoMethodError

时间:2016-04-24 02:00:32

标签: ruby

这是我的代码。

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方法,则代码运行正常。

有人可以解释这个错误吗?

2 个答案:

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