讓我們來看看這裏發生了什麼:
index = 0
words.each do |word|
break if index == words.length
p word[index][1].inspect
index += 1
end
在第一次迭代,word
將"how"
和index
將是0,所以你在做p word[0][1].inspect
。 "how"[0]
是"h"
,"h"[1]
是nil
(因爲字符串"h"
只有一個字符)。
在第二迭代中,word
是"are"
和index
是1 "are"[1]
是"r"
和"r"[1]
是,再次,nil
。
依此類推。在每次迭代中,您將從word
中獲取單個字符,然後嘗試獲取該字符串的第二個字符,該字符總是nil
。
我懷疑這是你試圖做:
index = 0
loop do
break if index == words.length
p words[index][1]
index += 1
end
看到區別?它打印words[index][1]
,而不是word[index][1]
,並一直保持循環,直到index == words.length
爲真。
但是,由於Ruby有Enumerable#each
,因此您可以讓它爲您執行遍歷words
的工作,而您完全不必擔心index
。這是你想要的:
words.each do |word|
p word[1]
end
P.S.你會注意到我使用了p word[1]
,而不是p word[1].inspect
。方法p
將自動在其每個參數上調用inspect
。如果你做p word[1].inspect
,你基本上在做puts word[1].inspect.inspect
。
只是另一種可能令你感興趣的方式'string =「你好嗎」 然後'string.split.map.with_index {| s,i |我%2!= 0? s [1] .capitalize:s = 0}' –