搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 1824|回复: 15
收起左侧

【Ruby】2 快速入门

[复制链接]

该用户从未签到

5

主题

35

好友

1万

积分

第一章

积分
12268
发表于 2012-8-7 02:30:07 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本文简要介绍Ruby的一些基本语法,阅读之后应该能写出基本的Ruby程序。

阅读的时候请保持irb开启状态(没装的话戳这里 https://www.gn00.com/t-90723-1-1.html

注意:我的irb输入提示符是'>>',结果提示符是'=>'

表达式


表达式是构建一个程序的基础部分之一。在irb中输入表达式,可以进行一些简单的计算。例如输入:

[mw_shl_code=text,true]>> 486[/mw_shl_code]

得到的结果是

[mw_shl_code=text,true]=> 486[/mw_shl_code]

[fold=没得到结果的看这里]不用输入那两个大于号啊那是提示符啊蠢货@3*[/fold]

同样可以用其他一些表达式来进行试验:

[mw_shl_code=text,true]>> 137 + 349
=> 486
>> 1000 - 334
=> 666
>> 5 * 99
=> 495
>> 10 / 5
=> 2
>> 2.7 + 10
=> 12.7
>> 3 * 5 + 10 - 6
=> 19
>> (2 + 3) * 5
=> 25
>> 10 / 3
=> 3[/mw_shl_code]

Ruby使用的是中序表达式,和常用的数学表达式是一致的。值得注意的是最后一个10/3的样例,由于10和3都是整数,所以相除的结果会被自动截断成整数。如果需要保留小数部分,可以这样:

[mw_shl_code=text,true]>> 10.0 / 3
=> 3.3333333333333335[/mw_shl_code]

这里由于10.3是一个浮点数(小数),在进行除法的时候,3会被自动转换为浮点数,然后进行计算。

另外,还可以用加号'+'来进行字符串的拼接:

[mw_shl_code=text,true]>> 'All hail ' + 'K1' + '!'
=> "All hail K1!"[/mw_shl_code]

看到这里,你应该能够把irb当计算器用了吧。那么,我们接下来介绍的是Ruby中的变量。

变量


变量是用来保存程序运行过程中状态的。在Ruby中,一般使用小写字母或下划线开头作为变量名(局部变量)。变量可以用等于号'='进行赋值。例如:

[mw_shl_code=text,true]>> a = 233
=> 233[/mw_shl_code]

给变量赋值之后,就可以无数次取得该变量里的值:

[mw_shl_code=text,true]>> a
=> 233[/mw_shl_code]

在赋值时,等号右边可以是一个表达式,也可以是一个字符串。(其实在Ruby里一切都是对象,均可以给变量赋值)

[mw_shl_code=text,true]>> b = 3749 * 279 + 111
=> 1046082
>> c = 'the return of the king'
=> "the return of the king"[/mw_shl_code]

当然,变量和变量,变量和表达式之间也可以进行计算:

[mw_shl_code=text,true]>> a = 123
=> 123
>> b = 345
=> 345
>> c = a + b + 567
=> 1035
>> d = 'hello, '
=> "hello, "
>> e = d + 'world!'
=> "hello, world!"[/mw_shl_code]

条件语句


程序之所以能够实现复杂的功能,是因为条件语句的存在。在Ruby中最基本的条件语句是if-elsif-else-end:

[mw_shl_code=ruby,true]if <condition> then
   
elsif <condition> then
    somecode
...
else <condition> then
    somecode
end[/mw_shl_code]

该语句从上而下判断每一个condition,如果condition的值为真,那么就执行其后到elsif/else之前的语句;否则继续判断下一条elsif或else。

注意,是elsif而不是elseif。作为condition的语句可以是一些大小的判断,经常用到的有大于'>',小于'<',大于或等于'>=',小于或等于'<=',相等'=='(注意这里是两个等号),不相等'!='。

在分行写的时候,关键字then可以省略。例如,如果需要根据分数score判断是否及格:

[mw_shl_code=text,true]>> if score > 60
>> puts 'pass'
>> else
?> puts 'failed'
>> end
pass
=> nil[/mw_shl_code]

输入输出


程序的目的是处理输入数据并进行输出。最基本的Ruby输入输出是两个函数puts和gets。

输出函数是puts,作用是输出一行的内容并换行。例如刚才判断分数是否及格的代码段中,就用puts函数来进行了输出。

如果需要输出变量的值,可以采用字符串拼接或特殊的#{变量名}的语法:

[mw_shl_code=text,true]>> name = 'Matz'
=> "Matz"
>> puts 'hello, ' + name
hello, Matz
=> nil
>> puts "hello, #{name}"
hello, Matz
=> nil
>> puts 'hello, #{name}'
hello, #{name}
=> nil[/mw_shl_code]

值得注意的是(暂时没注意到也没关系),在Ruby中,单引号括起来的字符串不会自动转义,而双引号则会自动替换变量和转义字符。

输入函数是gets,作用是读入一行的输入。当然,可以把输入存放到变量中:

[mw_shl_code=text,true]>> a = gets
ablakadabla
=> "ablakadabla\n"
>> puts a
ablakadabla
=> nil[/mw_shl_code]

[fold=在意字符串末尾'\n'的看这里]如果不想要字符串末尾的'\n',可以chomp一下。[/fold]

想玩一下的熊孩子可以试一下这个语句会得到什么:

[mw_shl_code=applescript,true]>> puts gets[/mw_shl_code]

实例


看到这里,应该能够试着写一下程序了吧。下面是一个简单的例子,根据输入的分数来进行等级判断,90~100分为A,80~89为B,70~79为C,60~69为D,0~59为E。顺带演示一下怎么用Ruby的主程序ruby来执行脚本文件。

现在,打开你最喜欢的文本编辑器,输入以下代码:

[mw_shl_code=ruby,true]#!/usr/bin/ruby
# encoding: UTF-8

puts '输入分数:'
score = Integer(gets)
if score < 0 || score > 100
    puts '非法输入!'
elsif score >= 90
    puts '等级A'
elsif score >= 80
    puts '等级B'
elsif score >= 70
    puts '等级C'
elsif score >= 60
    puts '等级D'
else
    puts '等级E'
end[/mw_shl_code]

将该文本用UTF-8进行保存(为了支持中文,第2行代码也是这个用意)。

如果你使用的是M$的系统,比如保存在C:\ruby\test.rb,那么可以打开一个cmd窗口,然后切换目录到C:\ruby\。如果ruby的安装及环境变量配置正确,就可以用

[mw_shl_code=text,true]ruby test.rb[/mw_shl_code]

来运行代码。运行结果如下:


                               
登录/注册后可看大图


总之是完成了所需要的功能。

本文主要是粗略地介绍了Ruby基本的表达式和语句,变量,条件判断和输入输出,主要也是新人向的教程一篇。之后也会和@Richeir @轻舟过 写详细的Ruby教程,应该会涵盖Ruby的条件,循环,字符串,函数和块,数组和散列,类操作等内容,欢迎大家一起跟着学。学习中遇到问题跟帖问,不清楚的地方也请指出。

点评

大神( ̄︶ ̄)y: 5.0
大神( ̄︶ ̄)y: 5
我爱你!  发表于 2012-8-7 20:55

评分

参与人数 3宅魂 +1 宅币 +90 贡献 +8 元气(技能点) +1 收起 理由
蛋菊战士 + 1 + 3 Σ( ° △ °|||)︴ 碉堡了
hcl + 37 + 8 + 1 Σ( ° △ °|||)︴ 碉堡了
Richeir + 50 Σ( ° △ °|||)︴ 碉堡了

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
发表于 2012-8-7 02:34:07 | 显示全部楼层
哇,好厉害
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

35

好友

1万

积分

第一章

积分
12268
 楼主| 发表于 2012-8-7 08:55:18 | 显示全部楼层

@36*
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

44

主题

57

好友

1万

积分

第一章

积分
12824
发表于 2012-8-7 09:36:00 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

35

好友

1万

积分

第一章

积分
12268
 楼主| 发表于 2012-8-7 09:49:52 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

97

主题

75

好友

1万

积分

第一章

积分
11926
发表于 2012-8-7 20:11:32 | 显示全部楼层
@前原圭一  嘛一吧啦,我爱你!!!!!!!!!!!
【抱歉,这几天要换工作,基本上没啥时间来管版面了..
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

35

好友

1万

积分

第一章

积分
12268
 楼主| 发表于 2012-8-7 20:19:39 | 显示全部楼层
Richeir 发表于 2012-8-7 20:11
@前原圭一  嘛一吧啦,我爱你!!!!!!!!!!!
【抱歉,这几天要换工作,基本上没啥时间来管版面了.. ...

@14*工作要紧
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

97

主题

75

好友

1万

积分

第一章

积分
11926
发表于 2012-8-7 20:21:36 | 显示全部楼层


这几天太忙了,没时间管论坛了。。抱歉啊。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

23

好友

5771

积分

序章

积分
5771
发表于 2012-8-21 23:04:01 | 显示全部楼层
好详细啊~我居然都能看懂了……
那个……
CMD没接触过~最后的那个实例运行不出来啊~
怎么切换的目录……
怎么运行的啊……
text.rb怎么弄出来的啊,我的选了UTF-8啊~怎么还是.txt呢
哪位能简单讲一下么【掩面我对自己的小弱问题无语了】
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

35

好友

1万

积分

第一章

积分
12268
 楼主| 发表于 2012-8-21 23:43:10 | 显示全部楼层
小螃蟹爱洗手 发表于 2012-8-21 23:04
好详细啊~我居然都能看懂了……
那个……
CMD没接触过~最后的那个实例运行不出来啊~

切换目录用windows的cd命令
运行的话照着打就可以了
源文件的话建议你用notepad++之类的软件,可以保存成UTF-8
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

23

好友

5771

积分

序章

积分
5771
发表于 2012-8-22 00:10:31 | 显示全部楼层
前原圭一 发表于 2012-8-21 23:43
切换目录用windows的cd命令
运行的话照着打就可以了
源文件的话建议你用notepad++之类的软件,可以保存成 ...

谢谢啦~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

97

主题

75

好友

1万

积分

第一章

积分
11926
发表于 2012-8-22 11:27:40 | 显示全部楼层
小螃蟹爱洗手 发表于 2012-8-21 23:04
好详细啊~我居然都能看懂了……
那个……
CMD没接触过~最后的那个实例运行不出来啊~


我写的入门的还有环境搭建的你看了么?
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

23

好友

5771

积分

序章

积分
5771
发表于 2012-8-22 21:24:15 | 显示全部楼层
1.1看了,其它的……【我是被茫茫的刷题记录给淹没了么】
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

8

好友

1万

积分

第一章

积分
10147
发表于 2012-12-20 21:53:36 | 显示全部楼层
跟进
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

482

主题

32

好友

5万

积分

第三章

积分
51405
发表于 2013-1-24 08:52:11 来自手机 | 显示全部楼层
谢谢了,学习了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-7-12 13:44 , Processed in 0.106918 second(s), 28 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表