问题描述
我正在用 Ruby 制作一个简单的 CLI,我让用户输入“Y”或“N”,但现在程序只有在他们输入大写时才能工作。无论情况如何,我都希望它能够正常工作。我尝试使用 "N".casecmp
或 "Y".casecmp
但这给了我一个参数错误。有任何想法吗?我需要在环境中require
一些东西吗?
也许展示我的代码会有所帮助?
if input == "Y"
method_a
elsif input == "N"
添加 .casecmp?
或 .casecmp
要么让我陷入无限循环,要么给我一个参数错误。
解决方法
您可以使用字符串downcase
的方法,您可以忘记大写的问题,因此您现在可以检查y
或n
。
文档:https://apidock.com/ruby/v2_5_5/String/downcase
示例:
"hEllO".downcase #=> "hello"
,
应该与 casecmp?
一起使用而不显式改变原始字符串
如果在 Unicode 大小写后 self 和 other_string 相等则返回 true 折叠,否则为假:
given = "Hello"
expected = "hello"
ok = given.casecmp?(expected)
puts ok ? "Ok" : "Not" # => "Ok"
,
我认为在 'y' 或 'Y' 输入之间有它们自己的 object_id。
所以它们实际上是不同的对象。
所以我认为这不是关于输入,而是关于我们将根据输入做什么。
如果你试图与你的输入进行比较而不考虑它们的情况,casecmp 应该可以解决问题
a = gets.to_s
if a.casecmp('Y').zero?
# do stuff
elsif a.casecmp('N').zero?
# do stuff
else
# do stuff
end
https://apidock.com/ruby/String/casecmp
'y'.casecmp('Y').zero? # true,then it is same regardless case
'Y'.casecmp('y').zero? # true