字符串被大写清空!当用户输入格式正确的输入时

时间:2013-05-17 01:05:18

标签: ruby

我正在做一些练习。

我写了以下代码

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,例程运行正常。

但是,如果输入的内容=正确的输出,即。约翰或纽约,例程清空相应的字符串变量。

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

3 个答案:

答案 0 :(得分:6)

尝试capitalize而不是带有“!”的那个。当没有任何改变时,带有爆炸的版本返回nil。文档here

答案 1 :(得分:1)

capitalize!如果大写,则返回大写字符串;如果没有大写字母(即之前和之后相同),则返回nil。见String#capitalize!。对于字符串,还有其他类似的方法,如gsub!,如果就地编辑不执行任何操作,则返回nil

只需使用capitalize

答案 2 :(得分:1)

这里的每个人都在告诉你为什么得到nil和解决方案的原因,但我看不到你正在使用的方法之间差异的解释。

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

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

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

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

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

  • 从用户处获取输入并将其存储为字符串
  • 创建一个新字符串,删除\n并将其返回
  • 创建一个新字符串,将其大写并将其返回

我希望这会有所帮助。