我希望用户的输入成为一个整数,它是新数组中的[0]索引,我想在以后添加更多项目。有没有办法将用户的输入转换为数组而不将其更改为整数并推送它?这是我目前的代码:
guesses = []
puts "Guess what number I'm thinking of. It's between 1 and #{solution_range}"
guess = gets.to_i
guesses.push(guess)
答案 0 :(得分:1)
你有将输入转换为Integer,因为Kernel#gets总是返回String或nil。作为单行执行此操作的一种方法是为变量分配空哈希,然后将强制转换附加到哈希。这可能比你目前的方法更快,但我还没有真正对它进行基准测试。
例如,如果您在提示符下输入1
,则会收到:
print 'Enter integer: '
guesses = [] << Integer(gets)
#=> [1]
这种方法的一个很好的副作用是,如果你不能用Kernel#Integer转换整数,你将得到一个适当的例外。例如:
输入integer:foo
ArgumentError:Integer()的值无效:&#34; foo \ n&#34;
使用String#to_i并不总能达到您的预期效果。假设您在提示符处输入foo
,请考虑以下内容:
print 'Enter integer: '
guesses = [] << gets.to_i
#=> [0]
因为String#to_i对于强制转换比对内核#Integer更宽松,所以任何非整数响应(包括nil)都将转换为0
。有时这可能是您想要的,但对于您发布的用例,这可能不太可取。