2015-09-19 70 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

謝謝,似乎這是問題,在這種情況下,我需要一個變量.. –