2015-09-19 43 views
1

此代码的工作,因为它应该是:使用红宝石“获取”块

puts "pick 1:" 
num_1 = gets.chomp 
array.detect { |k| k.id == num_1.to_i } 

... 
puts "pick n:" 
num_n = gets.chomp 
array.detect { |k| k.id == num_n.to_i } 

我不打算重用“民”变量其他地方,所以我想不转让gets变量,并用它在该块如下所示:

puts "Pick 1:" 
array.detect { |k| k.id == gets.chomp.to_i } 

在控制台中,有时它有时不起作用。如果它不是我卡在这个功能。

是非法使用还是应该以某种方式包装gets

+0

你正在每个数组元素中调用'gets',不是吗? –

+0

我看到,它被多次调用,导致它在数组上.. –

+0

另外:'gets.to_i'返回与'gets.chomp.to_i'相同的值,这就是为什么您经常会看到'chomp'被省略的原因。如果's =获得#=>“123 \ n”',则's.int#=> 123'的原因与''3只盲鼠标」.to_I#=> 3'相同。 –

回答

2

这两个脚本有两个不同的含义/结果。

在第一个中,您从输入中读取一个数字,将其存储起来,然后将数组中的所有项与该值进行比较。

在第二个脚本中,相反,由于“读取输入”代码位于该块内部,因此它将作为detect迭代的一部分执行。因此,系统会要求您输入一个值(相同的值?),数量与数组中项目的数量相同。

根据你的要求,第一个可能是正确的方法。

+0

谢谢,似乎这是问题,在这种情况下,我需要一个变量.. –