你已经学过了数组。在你学习“while
循环的时候,你对数组进行过「pushed」动作,而且将数组的内容打印了出来。另外你应该还在加分练习里研究过 Ruby 文件,看了数组支持的其他操作。这已经是一段时间以前了,所以如果你不记得了的话,就回到本书的前面再复习一遍吧。
找到了吗?还记得吗?很好。那时候你对一个数组执行了push
函式。不过,你也许还没有真正明白发生的事情,所以我们再来看看我们可以对数组进行什么样的操作。
当你看到像mystuff.append('hello')
这样的程序时,你事实上已经在 Ruby 内部激发了一个连锁反应。以下是它的运作原理:
- Ruby 看到你用到了
mystuff
,于是就去找到这个变量。也许它需要倒着检查看你有没有在哪里用=
建立过这个变量,或者检查它是不是一个函式参数,或者看它是不是一个全局变量。不管哪种方式,它得先找到mystuff
这个变量才行。 - 一旦它找到了
mystuff
,就轮到处理句点.
(period)这个操作符号,而且开始查看mystuff
内部的一些变量了。由于mystuff
是一个数组,Ruby 知道mystuff
支持一些函式。 - 接下来轮到了处理
push
。Ruby会将 「push」和mystuff
支持的所有函式的名称一一对比,如果确实其中有一个叫push
的函式,那么Ruby就会去使用这个函式。 - 接下来Ruby看到了括号(parenthesis)并且意识到, 「噢,原来这应该是一个函式」,到了这里,它就正常会呼叫这个函式了,不过这里的函式还要多一个参数才行。
一下子要消化这么多可能有点难度,不过我们将做几个练习,让你头脑中有一个深刻的打印象。下面的练习将字符串和列表混在一起,看看你能不能在里边找出点乐子来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<span class="nv">ten_things</span> <span class="o">=</span> <span class="s2">"Apples Oranges Crows Telephone Light Sugar"</span> puts <span class="s2">"Wait there's not 10 things in that list, let's fix that."</span> <span class="nv">stuff</span> <span class="o">=</span> ten_things.split<span class="o">(</span><span class="s1">' '</span><span class="o">)</span> <span class="nv">more_stuff</span> <span class="o">=</span> %w<span class="o">(</span>Day Night Song Frisbee Corn Banana Girl Boy<span class="o">)</span> <span class="k">while</span> stuff.length !<span class="o">=</span> 10 <span class="nv">next_one</span> <span class="o">=</span> more_stuff.pop<span class="o">()</span> puts <span class="s2">"Adding: #{next_one}"</span> stuff.push<span class="o">(</span>next_one<span class="o">)</span> puts <span class="s2">"There's #{stuff.length} items now."</span> end puts <span class="s2">"There we go: #{stuff}"</span> puts <span class="s2">"Let's do some things with stuff."</span> puts stuff<span class="o">[</span>1<span class="o">]</span> puts stuff<span class="o">[</span>-1<span class="o">]</span> <span class="c"># whoa! fancy</span> puts stuff.pop<span class="o">()</span> puts stuff.join<span class="o">(</span><span class="s1">' '</span><span class="o">)</span> <span class="c"># what? cool!</span> puts stuff.values_at<span class="o">(</span>3,5<span class="o">)</span>.join<span class="o">(</span><span class="s1">'#'</span><span class="o">)</span> <span class="c"># super stellar!</span> |
