方法顺序和 NoMethodError



这是我的代码。

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)

如果我键入更多大写字母,键入全部小写,或者在capitalize!之前使用 chomp 方法,则代码运行良好。

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

您必须非常仔细地阅读有关这些的文档,以了解它们的工作原理,因为经常会出现意外。在这种情况下capitalize!如果不进行任何更改,将返回nil

所以你的第一个版本是正确的:

gets.chomp.capitalize!

这也是最合理的操作顺序:您应该在操作数据之前对其进行修剪。

还值得注意的是,使用就地版本不是必需的,因为无论如何都要分配给变量:

first_name = gets.chomp.capitalize

鉴于名称的性质,无论如何,大写可能是一个糟糕的计划。"德罗宁"呢?

> capitalize!就地修改字符串并返回一个nil对象。 因此,当您尝试将方法链接在一起时gets.capitalize!.chomp capitalize!返回一个没有chomp方法的nil对象。

但是,如果您改用capitalize则该方法返回字符串的修改副本(这是您可以对其执行chomp 的副本)。

last_name = gets.capitalize.chomp

最新更新