4 大三元

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

**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.**
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 版权声明:本文为 gfson 原创文章,转载请注明出处。注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢...
    gfson阅读 2,947评论 0 6
  • C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终...
    LuckTime阅读 1,725评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 本周小结 本周实验室的状态呢周一:解决重构项目的mapping方面的细节问题。完成了软著代码文档的初版整理,已经到...
    im天行阅读 172评论 0 0
  • 感恩自己,比平日连续早起了3天,今天微微小雨,没有出门跑步,在家做一些简单的伸展运动。 给自己准备一份简单的早餐,...
    Flytty阅读 105评论 0 0