2

我现在正在做一些练习。

我写了以下代码

print "What's your first name?"
first_name=gets.chomp.capitalize!
print "Last name"
last_name=gets.chomp.capitalize!
print "City"
city=gets.chomp.capitalize!
print "State(Caps)"
state=gets.chomp.upcase!
print "Your name is #{first_name} #{last_name} from #{city}, #{state}"

当我对输入使用不正确的格式时(例如 john 或 nEW yORK,例程运行良好。

但是,如果输入的所有内容 = 正确的输出,即。John 或 New York,例程清空相应的字符串变量。

有没有办法忽略大写!输入格式是否正确的方法?

4

3 回答 3

6

尝试capitalize代替带有“!”的那个。当没有任何更改时,带有 bang 的版本返回 nil。文档在这里

于 2013-05-17T01:07:23.127 回答
1

capitalize!如果它没有大写,并且nil没有大写(即之前和之后相同) ,则返回大写字符串。请参阅字符串#capitalize!. 对于字符串还有其他类似的方法,例如,如果就地编辑什么都不做gsub!,则返回。nil

改用就好capitalize了。

于 2013-05-17T01:08:59.050 回答
1

这里的每个人都在给你你得到的原因nil和解决方案,但我看不到你正在使用的方法之间的区别的解释。

Ruby 中的每个函数和方法都会返回一个值,有时同一方法有两个版本。一个版本通常返回一个新对象而不修改原始对象,而另一个版本修改原始对象并且可能(或可能不)返回更改后的值。

后一种类型几乎总是以 . 为后缀!。所以你的代码正在做的是:

  • 从用户那里获取输入并将其存储为字符串
  • 创建一个新字符串,删除\n并返回它
  • 大写新字符串并修改自身

因此,如果需要,最后创建的对象会被修改并且不会返回,因为没有理由返回它。就像capitalize!字符串上有一个方法一样,也有一个chomp!方法。想象一下,如果\ngets. 然后chomp!会返回nilnil.capitalize抛出异常。

如果您将代码更改为仅capitalize按照其他人正确告诉您的方式使用,则执行将如下所示:

  • 从用户那里获取输入并将其存储为字符串
  • 创建一个新字符串,删除\n并返回它
  • 创建一个新字符串,将其大写并返回
于 2013-05-17T02:03:54.793 回答