使用此代码:
input = gets.chomp.downcase!
puts input
如果输入中至少有一个大写字母,输入将被放在屏幕上,没有其大写字母。但是如果输入没有大写字母,它将放置nil
,就像没有写入任何内容一样。
我希望我的输入完全落后;如果它是一个没有大写字母的字符串,它应该返回相同的字符串。
我想到了这样的事情:
input = gets.chomp
if input.include(uppercase) then input.downcase! end
但这不起作用。我希望有人知道我应该怎么做。
答案 0 :(得分:6)
根据字符串的文档: (强调是我的补充)
<强> downcase 强>
返回str 的副本,所有大写字母都替换为小写字母。该操作是区域设置 仅对不敏感的字符“A”到“Z”受到影响。注意:案例 替换仅在ASCII区域有效。
downcase!
如果没有进行任何更改,则下载str的内容,返回nil 。注意:案例替换仅在ASCII中有效 区域。
基本上它表示如果没有大写字母, downcase!(带感叹号)将返回nil
。
修复程序:
input = gets.chomp.downcase
puts input
希望有所帮助!
答案 1 :(得分:5)
这将有效:
input = gets.chomp.downcase
puts input
<强>字符串#downcase 强>
返回修改后的字符串,并保留原始未修改的字符串。
str = "Hello world!"
str.downcase # => "hello world!"
str # => "Hello world!"
<强>字符串#downcase!强>
修改原始字符串,如果未进行任何更改,则返回nil
;如果进行了更改,则返回新字符串。
str = "Hello world!"
str.downcase! # => "hello world!"
str # => "hello world!"
str.downcase! # => nil
<强>! (爆炸)方法
使用!
/非!
变体的Ruby方法以类似的方式运行是很常见的。有关原因的深入解释,请参阅this post。
答案 2 :(得分:1)
downcase!
返回nil的原因是您知道对象是否已更改。如果您将修改后的字符串分配给另一个变量(例如您在此处),则应使用downcase
代替(不使用爆炸!
)。
如果您不熟悉,标准库爆炸方法通常直接作用于接收器。这意味着:
foo = "Hello"
foo.downcase!
foo #=> "hello"
对此:
foo = "Hello"
bar = foo.downcase
foo #=> "Hello"
bar #=> "hello"