我是Ruby新手(坦率地說,我剛開始學習它的樂趣,沒有任何未來的計劃),我注意到循環的奇怪行爲。我認爲我的問題來自於Ruby的機制知識的缺乏。Ruby循環創建空行
boysNames = ["Martin", "Lucas", "John"]
#class only for one method. I know it's not absolutely correct, but huh I'm just learning Ruby
class Human
def initialize(name)
@name = name;
end
String name = ""
def getName()
puts @name;
end
end
Array boys = []
#create objects
for x in boysNames
tempBoy = Human.new(x)
boys.push(tempBoy)
end
#output for class
puts "Method 1: for in loop \n"
for x in boys
puts x.getName()
end
puts "\nMethod 2: manual array[var] \n"
boys[0].getName()
boys[1].getName()
boys[2].getName()
puts "\nMethod 3: .each do \n"
boys.each do |i|
puts i.getName()
end
#output for Array
puts "Method 1: for in loop \n"
for x in boysNames
puts x
end
puts "\nMethod 2: manual array[var] \n"
puts boysNames[0]
puts boysNames[1]
puts boysNames[2]
puts "\nMethod 3: .each do \n"
boysNames.each do |i|
puts i
end
#loop through the boys array
puts "\nboys array: \n"
for x in boys
puts x
end
所以我的問題是:爲什麼當我遍歷數組,一切都很好,當我遍歷類,我的結果由換行符分?有沒有我找不到的「隱形」物體?正如你所看到的,我的最後一個循環只能找到三個在內存中具有不同位置的對象。
如果答案中包含「如何工作」的解釋,我會很高興。
謝謝您提前;)
P.S.輸出:
Method 1: for in loop
Martin
Lucas
John
Method 2: manual array[var]
Martin
Lucas
John
Method 3: .each do
Martin
Lucas
John
Method 1: for in loop
Martin
Lucas
John
Method 2: manual array[var]
Martin
Lucas
John
Method 3: .each do
Martin
Lucas
John
boys array:
#<Human:0x007f2a586db788>
#<Human:0x007f2a586db648>
#<Human:0x007f2a586db5d0>
P.S.S.我使用this爲Ruby解釋器/編譯器(我聽說,紅寶石也可以被編譯,所以...)
既然你在學習,我會指出你應該注意的一些編碼風格。你不需要類型註釋,比如'String name',只需要'name'。和'Array boys = []'一樣,只需使用'boys = []'。而Ruby使用'snake_case'而不是'camelCase'。我總是喜歡用[this](https://github.com/bbatsov/ruby-style-guide)等社區驅動的最佳實踐回購來更習慣地學習語言!希望能幫助到你。玩得開心學習Ruby,這是一種美妙的語言! –
謝謝你的建議。 '字符串名稱'讓我知道什麼類型的數據是'名稱'。當談到代碼優化時,我絕對同意你的看法 我不知道Ruby中的snake_case習慣。很高興知道! – Thomas