在块中使用 ruby 'gets'

use ruby 'gets' in block

这段代码可以正常工作:

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 }

我不会在其他任何地方重用 'num' 变量,所以我不想将 gets 分配给变量并在块中使用它,如下所示:

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

在控制台中有时可以,有时不能。如果不是,我就卡在函数里了。

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

两个脚本有两个不同meanings/results。

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

相反,在第二个脚本中,由于 "read from input" 代码在块内,它将作为 detect 迭代的一部分执行。因此,您将被要求输入一个值(相同的值?)与数组中的项目数相同的次数。

根据你的要求,第一种应该是正确的做法。