我正在做一些练习。
我写了以下代码
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,例程运行正常。
但是,如果输入的内容=正确的输出,即。约翰或纽约,例程清空相应的字符串变量。
有没有办法忽略大写!输入格式正确的方法吗?
答案 0 :(得分:6)
尝试capitalize
而不是带有“!”的那个。当没有任何改变时,带有爆炸的版本返回nil。文档here。
答案 1 :(得分:1)
capitalize!
如果不大写,则返回大写字符串;如果没有大写字母(即之前和之后相同),则返回nil
。见String#capitalize!。对于字符串,还有其他类似的方法,如gsub!
,如果就地编辑不执行任何操作,则返回nil
。
只需使用capitalize
。
答案 2 :(得分:1)
这里的每个人都在告诉你为什么得到nil
和解决方案的原因,但我看不到你正在使用的方法之间差异的解释。
Ruby中的每个函数和方法都返回一个值,有时同一方法有两个版本。一个版本通常返回一个新对象而不修改原始对象,而另一个版本修改原始对象,可能(或可能不)返回更改后的值。
后一种类型几乎总是以!
为后缀。所以你的代码正在做的是:
\n
并将其返回因此,如果需要,最后创建的对象将被修改,并且不会返回,因为没有理由返回它。就像字符串上有一个capitalize!
方法一样,还有一个chomp!
方法。想象一下,如果在\n
返回的字符串末尾没有gets
,则相反。然后chomp!
会返回nil
而nil.capitalize
会抛出异常。
如果您将代码更改为仅使用其他人正确告诉您的capitalize
,则执行将如下所示:
\n
并将其返回我希望这会有所帮助。