4 大三元

作者: 彩虹门票 | 来源:发表于2017-07-06 11:29 被阅读14次

    我们已经学了几种不同种类的对象(数字字母),还学了指向它们的变量;下一步我们想做的就是把它们“和谐相处”起来。

    **Tristar**
    我们已经知道如果想让程序输出25,下面的代码不会成功运行,因为数字和字符串不能相加:
    var1 = 2
    var2 = '5'
    
    puts var1 + var2
    

    部分原因是电脑不清楚你是想得到7(2+5),还是你想得到25('2'+'5').

    在我们能够把他们加到一起前,我们需要某种方法来提取到var1的字符串格式和var2的数字格式.

    类型转换

    想要得到一个对象的字符串格式,我们只需在其后加上.to_s:



    类似的,使用 to_i 会得到一个对象的整数格式,to_f 会得到浮点格式。下面让我们更进一步来看看用这三种方式会得到什么:


    注意到:即使在我们通过调用 to_s 得到var1的字符串格式后,var1总是指向 2,而不会指向 ‘2’。除非我们明确得再将var1重赋值(需用到 = 符号),var1至始至终都只会指向 2.

    下面让我们来看一个更有趣(且有点怪异)的转换:

    puts '15'.to_f
    puts '99.999'.to_f
    puts '99.999'.to_i
    puts ''
    puts '5 is my favorite number!'.to_i
    puts 'Who asked you about 5 or whatever?'.to_i
    puts 'Your momma did.'.to_f
    puts ''
    puts 'stringy'.to_s
    puts 3.to_i
    

    输出结果可能有些让人吃惊。第一个输出是标准的,会得到浮点数15.0,之后我们将字符串‘99.999’转换为浮点和整数:浮点转换如我们期待的那样,而整数转换通常是向下舍去。

    之后我们用几个不寻常的字符串进行数字转换。to_i 会忽视它遇到没法转换整数的第一个及之后的所有内容,因此第一个例子会转换成 5,另一个例子中由于是用字母开头,to_i 会直接忽视,所以计算机只得到了0.

    最后面的两个转换什么也没做,正如我们期待的那样。

    细看puts

    细看转换操作有些奇怪…比如下面的例子:

    puts 20
    puts 20.to_s
    puts '20'
    
    20
    20
    20
    

    这三个输出为什么都一样呢?好吧,后两个应该是一样的(20.to_s就是 ‘20’),但第一个整数20呢?如果这样在纸上写出整数20是表示什么呢?你先写一个 2 然后再写一个 0 ,实际上你写出的是一个字符串,而不是数字。数字20是我手指头和脚趾头的总数,而不是 2 后面加个 0.

    好吧,在我们友好的朋友puts后面隐藏着一个大秘密:在puts输出一个对象之前,它会用 to_s来获取对象的字符串格式。事实上puts中的 s 就是string的简写,puts实际上就表示 put string.
    现在来看的话就没什么太惊喜的了,但是在Ruby中有许多许多种类的对象(你以后会学到如何自己创建一个对象!),所以当你试着输出一个奇特的对象时你最好知道将会发生什么,这个对象可以是你祖母的照片,也可以是一个音乐或其他的,这些之后都将会遇到。

    与此同时,我们还有几种其他的方式,这几种方式将会让我们写出多种多样有趣的程序…

    gets 和 chomp

    如果puts表示 put strings ,我想你肯定能猜到gets是什么的简写。就像puts总是输出字符串一样,gets将仅仅取回字符串,但它会从哪得到字符串呢?

    是从你那得到的!好吧,最终是从你的键盘上获取的。那是因为你的键盘只会输入字符串,这就相互配合得很完美了。实际上gets所做的仅仅是读取你键入的数据直到你回车(Enter),让我们试试下面的:

    puts gets
    

    当然,不论你键入的是什么内容,gets只会重复并回应给你。你可以试着键入其他内容,自己试验几次。

    到现在我们能够和程序进行交互了!下面的例子你可以键入你的名字,程序会向你打招呼的:

    puts 'Hello there, and what\'s your name?'
    name = gets
    puts 'Your name is ' + name + '?  What a lovely name!'
    puts 'Pleased to meet you, ' + name + '.  :)'
    

    咦!我刚刚运行了这个程序--我输入了我的名字,下面是输出的:

    嗯……看起来是因为当我输入C,h,r,i,s,之后我敲了回车键,gets获取到了我名字含有的所有字母和Enter 键!幸运的是,有解决这个问题的方法:chomp. 它将去除字符串结尾的任何Enter键。让我们在试试这个程序,这次用上chomp来帮助我们:
    puts 'Hello there, and what\'s your name?'
    name = gets.chomp
    puts 'Your name is ' + name + '?  What a lovely name!'
    puts 'Pleased to meet you, ' + name + '.  :)'
    

    完美运行!不过需要注意到name是指向了 gets.chomp,我们不需要说name.chomp,name本身就已经被除去Enter了(chomped)!

    牛刀小试

    • 写一个问某人的First name,然后middle name,然后last name的程序,最终程序应该用他的全名来向这个人打招呼。
    • 写一个问某人幸运数字的程序,然后在幸运数字上+1,然后建议某人把最新的数字做为更大更好的幸运数字(尽管你需要讲究点策略)

    当你做完这两个训练后(再加上你自己想试验的程序),接下来让我们学点其他的

    参考:


    **First+Mid+Last**
    **Favorite No.**

    相关文章

      网友评论

        本文标题:4 大三元

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