美文网首页RubyRuby入门
7(1)深情地拥抱 有始有终

7(1)深情地拥抱 有始有终

作者: 彩虹门票 | 来源:发表于2017-09-29 22:55 被阅读9次
深情地拥抱

我们写一个这样的程序:它先让我们键入尽可能多的单词(每行键入一个单词直到我们在一个空白行里敲回车),然后程序会将我们输入的单词以字母表顺序排列并输出。试试如何编写吧……

所以……首先让我们……嗯……哼……对了,我们可以……嗯……

好吧,我不认为我们现阶段可以完成这个程序。我们需要知道一种能够存储不确定数量单词的方法,还需要把它们都记录下来(这样就不会与其他变量搞混),我们还需要它们排序,因此这里就需要用到阵列的概念了。

阵列就是在你电脑中的一串列表,在列表中的每个元素都与变量类似:你能够知道每个单一元素指向哪个对象,你也可以更改元素使其指向其他不同的对象。先让我们看看下面几个阵列:

[]
[5]
['Hello', 'Goodbye']

flavor = 'vanilla'             # This is not an array, of course...
[89.9, flavor, [true, false]]  # ...but this is.

第1个是空阵列,然后是一个包含单个数字的阵列,然后是包含两个字符串的阵列,之后是一个简单的赋值,最后哦的是一个包含3个对象的阵列,阵列中最后一个对象是一个阵列[ true , false ].值得强调的是:变量不是对象,所以我们最后一个阵列实际上指向的分别是浮点、字符串和一个阵列。即使我们将flavor指向其他的对象,这样也不会改变这个阵列。

为了方便我们调用/提取阵列中特定的对象,每个元素都会有相应的数字索引。程序员(及大多数数学家)会从0开始数数,所以阵列中第一个位置是0号位。下面来看看我们如何提取阵列中的对象:

names = ['Ada', 'Belle', 'Chris']

puts names
puts names[0]
puts names[1]
puts names[2]
puts names[3]  # This is out of range.

可以由上看到 puts names会将阵列names中的每个元素都输出到屏幕;puts name[0]输出阵列中“第1个”元素,puts name[1]输出阵列中“第2个”元素……我肯定这看起来挺困惑的,但是你的确要适应它。你仅仅需要开始适应从0开始计数,而不是用1、2这样数数。假如你出去就餐点了5道菜,不要说第“1”道菜…而要说第“0”道菜(在头脑中认为是 道[0]);你右手由5个手指头,它们的计数是0,1,2,3,4;我妻子和我是杂耍爱好者,当我们玩6个捷克棒时计数应该是棒0--5,在接下来几个月后我们将能够玩第6个捷克棒(这样我们就能玩7个捷克棒了)。你将会从第0个开始计数zeroth(这还真是一个存在的单词,你可以问问其他程序员和数学家)。

上面例子中我们想试验puts names[3]会发生什么,你期望输出一个错误提示吗?有时候你向电脑提出一个没有具体意义的问题,电脑会给你输出一个错误提示,但有时你提出问题而答案会是nothing。这上例中第3个元素是什么?Nothing, names[3]会是什么?nil:Ruby中表示nothing的方式。nil是一个特殊对象,用来表示"没有任何对象"。当你puts nil时,它会输出空行(只输出新的一行)。

如果以后你用到上面这种有趣的阵列元素的计数方式,不要害怕!我们可以不用上面计数方式调用对象,而采用多种多样的调用方式,好比像下面这样:

each 调用方法

each可以让我们对阵列中每个指向的对象进行操作,因此如果我们像在阵列中说些关于每种语言的好话,我们可以:

languages = ['English', 'German', 'Ruby']

languages.each do |lang|
  puts 'I love ' + lang + '!'
  puts 'Don\'t you?'
end

puts 'And let\'s hear it for C++!'
puts '...'

发生了什么?好吧,我们是在调用阵列中每个对象而不需要用到任何数字和计数,这样再合适不过了!说人话来解释上面的程序是:对于在阵列languages中的每个对象,将变量lang指向这些对象,然后让阵列do做任何我们想让它做的事,直到运行到end.(你只需要了解的是C++ 是另外一种计算机语言,它比Ruby语言更难以学习,通常要写同一种功用的程序,用C++语言写要比用Ruby来写的代码要长得多得多)

你可能会联想到上面的each方法与我们之前学的loop循环方法挺像的,很对,它们很类似,但它们一个重要的不同是each是一个类函数的方法,而whileend以及doifelse等等不是方法,它们只是Ruby语言中基本组成部分,就像=和括号一样,类似于英语中的标点符号那样。

但是对于each来说不一样,each仅仅是阵列中另一种方法。each这样类似loop循环的调用方法通常被称为迭代

关于迭代需要单独强调的是:它们总会有do…end在后面跟随,whileif从来不会在它们中有do出现,我们只会在迭代中用到do

下面是另一个小的迭代,但没用到任何阵列的方法……用的是数字的方法:

3.times do
  puts 'Hip-Hip-Hooray!'
end
有始有终

相关文章

  • 7(1)深情地拥抱 有始有终

    我们写一个这样的程序:它先让我们键入尽可能多的单词(每行键入一个单词直到我们在一个空白行里敲回车),然后程序会将我...

  • 深情地拥抱

    我的任教生涯已近20年,不能说学生桃李满园但也为数不少。对我来说,教过的孩子们有印象深刻的、有见着能认识的、有见...

  • 深情地拥抱这世界

    起风的日子学会依风起舞,下雨的时候学会为自己撑起一把伞,阳光时向着未来奔跑,生活有望穿秋水的期待,也会有意想不到的...

  • 承认吧,他不爱你

    1. 2009年12月,冯德伦和徐若瑄在新片首映现场深情拥抱,莫文蔚独自站在演唱会舞台,满脸带泪,深情又悲戚地哭着...

  • 元旦祈福

    在18年的枝头 仰望19年的萌芽 让我们深情地呼吸 拥抱灿烂的春花

  • 《创造全新幸福生活8》——拥抱

    每个人都渴望爱,有时候我们也以为很爱自己。我们常常深情地拥抱孩子、拥抱爱人,我们却把内心最深处的渴望严密地封存在心...

  • 愿你拥抱美好,不负深情

    愿你拥抱美好,不负深情

  • 北行漫记之草原情思(外一篇)

    文/高书峰 拥抱你,深情地拥抱蓝天白云映衬下的你。草原,我躺在你宽阔的的怀抱里,尽情地感觉你那浑厚的脉搏,你那洋...

  • 深情的拥抱

    生命里的第一个拥抱 我有些不知所措 那是多年没有相见的悸动 和久别重逢的深深感动 让人错觉一种家的温馨 生活给我的...

  • 深情的拥抱

    其实也没有什么事 忍不住还是想和你说说话 就好像一个人在屋里 收起散落的衣服 听着耳机里传来的音乐 又好像桌上的一...

网友评论

本文标题:7(1)深情地拥抱 有始有终

本文链接:https://www.haomeiwen.com/subject/xsoiextx.html