Ruby on RailsRuby入门Ruby

4 大三元

2017-07-06  本文已影响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+Mid+Last**
**Favorite No.**
上一篇 下一篇

猜你喜欢

热点阅读