习题 39: 阵列的操作
最后更新于:2022-04-01 05:40:10
你已經學過了陣列。在你學習“`while` 迴圈的時候,你對陣列進行過「pushed」動作,而且將陣列的內容印了出來。另外你應該還在加分習題裡研究過 Ruby 文件,看了陣列支援的其他操作。這已經是一段時間以前了,所以如果你不記得了的話,就回到本書的前面再複習一遍吧。
找到了嗎?還記得嗎?很好。那時候你對一個陣列執行了 `push` 函式。不過,你也許還沒有真正明白發生的事情,所以我們再來看看我們可以對陣列進行什麼樣的操作。
當你看到像 `mystuff.append('hello')`這樣的程式時,你事實上已經在 Ruby 內部激發了一個連鎖反應。以下是它的運作原理:
1. Ruby 看到你用到了 `mystuff`,於是就去找到這個變數。也許它需要倒著檢查看你有沒有在哪裡用 `=` 建立過這個變數,或者檢查它是不是一個函式參數,或者看它是不是一個全局變數。不管哪種方式,它得先找到 `mystuff` 這個變數才行。
2. 一旦它找到了 `mystuff`,就輪到處理句點 `.` (period)這個操作符號,而且開始查看 `mystuff` 內部的一些變數了。由於 `mystuff` 是一個陣列,Ruby 知道 `mystuff` 支援一些函式。
3. 接下來輪到了處理 `push`。Ruby會將 「push」和 `mystuff` 支援的所有函式的名稱一一對比,如果確實其中有一個叫 `push` 的函式,那麼Ruby就會去使用這個函式。
4. 接下來Ruby看到了括號(parenthesis)並且意識到, 「噢,原來這應該是一個函式」,到了這裡,它就正常會呼叫這個函式了,不過這裡的函式還要多一個參數才行。
一下子要消化這麼多可能有點難度,不過我們將做幾個練習,讓你頭腦中有一個深刻的印象。下面的練習將字符串和列表混在一起,看看你能不能在裡邊找出點樂子來:
~~~
ten_things = "Apples Oranges Crows Telephone Light Sugar"
puts "Wait there's not 10 things in that list, let's fix that."
stuff = ten_things.split(' ')
more_stuff = %w(Day Night Song Frisbee Corn Banana Girl Boy)
while stuff.length != 10
next_one = more_stuff.pop()
puts "Adding: #{next_one}"
stuff.push(next_one)
puts "There's #{stuff.length} items now."
end
puts "There we go: #{stuff}"
puts "Let's do some things with stuff."
puts stuff[1]
puts stuff[-1] # whoa! fancy
puts stuff.pop()
puts stuff.join(' ') # what? cool!
puts stuff.values_at(3,5).join('#') # super stellar!
~~~
## 你應該看到的結果
~~~
$ ruby ex39.rb
Wait there's not 10 things in that list, let's fix that.
Adding: Boy
There's 7 items now.
Adding: Girl
There's 8 items now.
Adding: Banana
There's 9 items now.
Adding: Corn
There's 10 items now.
There we go: ["Apples", "Oranges", "Crows", "Telephone", "Light", "Sugar", "Boy", "Girl", "Banana", "Corn"]
Let's do some things with stuff.
Oranges
Corn
Corn
Apples Oranges Crows Telephone Light Sugar Boy Girl Banana
Telephone#Sugar
$
~~~
## 加分習題
1. 上網閱讀一些關於「物件導向程式(Object Oriented Programming)」的資料。暈了吧?嗯,我以前也是。別擔心。你將從這本書學到足夠用的關於物件導向程式的基礎知識,而以後你還可以慢慢學到更多。
2. `something.methods` 和 something的 class 有什麼關係?
3. 如果你不知道我講的是些什麼東西,別擔心。程式設計師為了顯得自己聰明,於是就發明了Opject Oriented Programming,簡稱為OOP,然後他們就開始濫用這個東西了。如果你覺得這東西太難,你可以開始學一下「函式式程式(functional programming)」。