ruby基础(一)
Ruby基础
1.对象、变量和常量
1.1 对象
在Ruby中表示数据的最基本单位是对象,任何数据都是对象,使用类来表示对象的种类。
一个某个类的对象称作对象的实例。
| 对象 | 类 | eg |
|---|---|---|
| 数值 | Numeric | 1、2.5、3.0 |
| 字符串 | String | "sdasd"、'sadad' |
| 数组 | Array | []、[1,2,"asd] |
| 散列 | Hash | {}、{name:"aaa"}、{:name=>"aaa"} |
| 正则 | Regexp | /aaa/、/[abc]/ |
| 文件 | File | File.open(filename) |
| 符号 | Symbol | :foo、:"foo" |
所有的对象都有标识和值,Ruby中对象的标识(ID)是唯一的。可以通过object_id
或(id)方法获得对象的id。
arr=[1,2]
arr1=[];
p arr.object_id #47376880589400
p arr1.object_id #47376880589380
equal?方法用来判断两个对象是否为同一个对象(id是否相同)
arr=[1,2]
arr1=[];
arr2=arr;
p arr.equal? arr1 #false
p arr.equal? arr2 #true
ruby使用==来比较将个对象的值是否相等
str="foo"
st="f"+"o"+"o"
s="bar"
p str==st #true
p str==s #false
ruby还提供了eql?方法来判断两个对象的值是否相等,==和Object类定义的
方法,大部分情况下他们的执行结果时一样的,但是也有例外,数值类会重新定义eql?
方法。
p 1.0 == 1 #true
p 1.0.eql? 1 #true
1.2 变量
Ruby中有四种变量,变量的命名决定了变量的种类
| 变量 | 命名规则 | eg |
|---|---|---|
| 局部变量 | 以英文小写字母或_开头 | foo、_area |
| 全局变量 | 以$开头 | $foo |
| 类变量 | 以@@开头 | @@foo |
| 实例变量 | 以@开头 | @foo、@name |
全局变量和局部变量
全局变量在不管在程序的那部分使用都是相同,局部变量在当前作用域中生效。
eg:在其他库中修改全局变量和局部变量的值
sub.rb修改变量的值
_local="a"
$global=123
test.rb中引用sub.rb
_local="local"
$global="global"
require_relative 'sub'
p _local #local
p $global #123
局部变量为不同的模块所私有,所以没有改变,全局变量整个程序共有,
所以值被修改了。局部变量在数次赋值的时候初始化,引用了未初始化的局部变量程序会报错。
1.3 常量
常量和变量类似,用来保存一个对象的值,不过常量初始化后就不能改变了
常量以大写字母开头,ARGV、RUBY_VERSION都时与定义的常量。
1.4 保留字
Ruby中保留字不能用来作标识符。常见的保留字有 end、next、def、class等。
原则上来说我们在给变量和常量设置标识符时不要使用和保留字相近的单词。
1.5 多重赋值
a=1
b=2
c=3
可以合并为
a,b,c=1,2,3
puts a #1
puts b #2
puts c #3
赋值时给变量前面加上*,该变量可以用来收集为分配的值
a,b,*c=1,2,3,4
p [a,b,c] #c=[3,4]
a,*b,c=1,2,3,4
p [a,b,c] #b=[2,3]
使用多重赋值交换两个变量的值
a,b=1,2
a,b=b,a
p [a,b] #[2,1]
使用数组进行多重赋值
arr=[1,2]
a,b=arr
p a #1
p b #2
#只获取数组中的一个值
c,=arr
p c #1
2.条件判断
ruby中的条件语句有if、unless、case.他们根据判断条件的值执行不同的操作,
判断条件总是返回true或false.
ruby中的真假值
| 真假值 | eg |
|---|---|
| true | false和nil以外的所有对象 |
| false | false、nil |
ruby中用后来进行条件比较的有>、<、==等比较运算符,逻辑运算符&&、||、!,还有一些方法:
eg:
p /Ruby/ =~ "Ruby" #=> true
p "dasdsa".empty? #=>fasle
一般返回真假值的方法都要以?结尾。
if语句(then可以省略) 条件为真时执行对象的语句
if 条件 then
处理程序
elsif 条件 then
处理程序
else
处理程序
end
eg:
a=1;
if a<1 then
print "a<1"
elsif a<2 then
print "a<2" #=>a<2
else
print "a大于等于2"
end
unless语句 条件为假时执行对象的语句
unless 条件
条家为假的处理程序
else
条件为真的处理语句
end
eg:
a=10
unless a!=10
print "a等于10" #=>a等于10
else
print "a不等于10"
end
case语句
case 比较对象
when 值1 then
处理1
when 值2 then
处理2
when 值3 then
处理3
else
处理4
end
eg:
tags=["A","B"]
tags.each do |tag|
case tag
when "a","A"
puts "tags has 'A'or'a'"
when "b","B"
puts "tags has 'B'or'b"
else
puts ""
end
end
case语句在比较值相等时采用的时===,如上面的代码的when等价于,其中tag为右边
if "a"===tag||"A"===tag
puts "tags has 'A'or'a'"
end
当时=的左边时数值或者字符串时,和没有区别。此外===还有其他用途
a=/ruby/
p a==="ruby" #true
p String==='sad' #true
p (1..2) ===2 #true
if修饰符和unless修饰符
if和unless可以像下面这样使用
a,b=2,1
puts "a比b大" if a>b # a比b大
等价于
a,b=2,1
if a>b
puts "a比b大"
end
3.循环
Ruby中实现循环的方法有两种:
使用循环语句
使用方法实现循环
六种循环语句
1.times方法
times使用单纯执行一定次数的处理。
语法:
循环次数.times do
希望循环的处理
end
doend可以用{}代替
循环次数.times {
希望循环的处理
}
times方法也可以获取快中当前的执行次数
5.time do |i|
~~~
end
eg:
10.times do |i|
puts "第#{i}次循环"
end
for语句
for 变量 in 开始数值..结束数值 do
希望循环的处理
end
eg:求1到5这些数字加起来的和
sum=0;
for i in 1..5
sum+=i;
end
puts sum #=>15
times方法和for语句的区别
for语句循环的开始和结束值可以任意指定。times方法的循环一定时从0开始的。
eg:遍历数组对象
arr=["hello",123]
for i in arr
print "#{i} " #hello 123
end
while语句
不论那种类型的循环,while语句都可以胜任.
语法
while 条件 do
希望循环的处理
end
eg:输出1~9的数字
i=1
while i<10 do
puts i #输出1~9
i+=1
end
until语句
当不满足条件时执性循环语句
语法:
until 条件 do
希望循环的处理
end
eg:计算从0开始的整数的和,当和超过55结束
sum 1=0
sum,i=0,0
until sum>50
sum+=i
i+=1
end
puts sum #55
each方法
each方法与for语句类似,ruby中for语句是用each方法实现的。
语法:
对象.each do |变量|
希望循环的处理
end
eg:遍历数组
arr=[1,2,3]
arr.each do |i|
puts i;
end
eg:打印0~10之间的数字
(0..10).each do |i|
puts i #1 .... 10
end
loop方法
loop是一种没有终止条件就会一直执行的循环的处理。
语法:
loop do
puts "ruby"
end
一般都要在某种条件下breadk跳出循环.负责会发生死循环。
4.循环控制
| 命令 | 用途 |
|---|---|
| break | 跳出循环 |
| next | 跳到下一次循环 |
eg:打印0-5的数字
(0..10).each do |i|
puts i #1 .... 10
if i==5 then
break
end
end
ruby基础(一)的更多相关文章
- Ruby基础教程
一.Ruby基础知识 1.关于Ruby Ruby是脚本语言 Ruby是面向对象语言 Ruby是跨平台语言 Ruby是开放源码软件 2.Ruby入门书籍推荐 <Ruby.Programming向R ...
- 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充
https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...
- ruby基础(四)
ruby基础知识 模块 模块是ruby的特色功能之一.如果说类是事物的实体以及行为,那么模块表现的 就是事物的行为部分,模块和类有以下两点不同: 模块不能拥有实例 模块不能被继承 模块的使用方法 mo ...
- ruby基础语法
首发:个人博客,更新&纠错&回复 学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}. 这种事情毫无技术含量又毫无乐趣可言,但极 ...
- Ruby基础类型,动态特性,代码块
#Ruby内置基础数据类型 NilClass,TureClass,FalseClass,Time,Date,String,Range,Struct,Array,Hash #Numerice 1.分为I ...
- Ruby 基础教程 第二部分 Ruby 的基础 第4章
第二部分 Ruby 的基础 第4章~第6章 这一部分是 Ruby 编程需要遵守的规则. 第四章 对象,变量与常量 对象 & 类 对象的常见种类: 数值对象 字符串对象 数组.散列对象 正则表达 ...
- Ruby 基础教程 第一部分总结
第一部分:Ruby 初体验 第一章: Ruby 初探 前言 开头的这一章节讲了一些十分基础的内容,重要的几个话题有: ruby 命令的执行方法 对象.方法的概念 常见的打印方法 ruby 命令的执行方 ...
- ruby基础(二)
ruby语法基础 1.方法 方法时对象定义的与该对象相关的操作.在Ruby中,对象的所有的操作都被封装成 方法. 语法糖:语法糖是一种为了照顾一般人的习惯而产生的特殊语法. ruby中一切数据都是对象 ...
- ruby基础(三)
类和模块 1.类 类是面向对象中一个重要的术语.我们可以把类看作是对象的抽象, 所有的这类对象都有这些特征.而对象则是类的具体实现,按照类的要求创建的 对象就是该类的对象.类就像对象的雏形一样,决定了 ...
随机推荐
- 洛谷P1290欧几里德游戏
题目地址 题目大意: 两个人st和ol博弈 有两个整数n,m 每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数) 最后得到0的为胜利者 思路: (以下讨论均在n<m的条 ...
- OO 第三单元
一.JML语言理论基础 JML 是用于对 Java 程序进行规格化设计的一种表示语言,为严格的程序设计提供了一套行之有效的方法. 我个人对于 JML 的几点看法: JML 的规格化设计相较于自然语言的 ...
- 2021软工-调研作业-Notion
2021软工-调研作业-Notion 项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 学习软件开发的工业化 ...
- Github Pages(io) + 域名重定向 (手把手教你搭建个人网站)
好歹也成为了在读phd的人,拥有个人网站是个有排面有很必要的事儿~ 在这里利用Github Pages + 域名重定向,实现个人网站的光速搭建~ 1.0 Github Repositories 首先你 ...
- day7.文件处理
@字符编码 见:https://zhuanlan.zhihu.com/p/108805502 一.文件基本操作 ''' 1.什么是文件 文件是操作系统提供给用户或者应用程序的一种操作硬盘的 ...
- Android使用ContentProvider初始化SDK库方案总结
做Android SDK开发的时候,一般我们会将初始化的方法封装为,然后让调用SDK的开发者在Application的onCreate方法中进行初始化.但是目前一些主流的SDK框架,并没有提供相关的方 ...
- 研发团队管理:IT研发中项目和产品原来区别那么大,项目级的项目是项目,产品级的项目是产品!!!
前言 从事IT行业多年,一路从小杂兵成长为大团队Leader,对于研发整个体系比较清楚,其实大多人都经历过但是都忽略了的研发成本管控的一个关键的点就是研发过程中项目级和产品级的区别. 市场基本 ...
- .NET RulesEngine(规则引擎)
一次偶然的机会,让我拿出RulesEngine去完成一个业务,对于业务来说主要是完成一个可伸缩性(不确定的类型,以及不确定的条件,条件的变动可能是持续增加修改的)的业务判断.比如说完成一个成就系统,管 ...
- 基于vite2+electron12后台管理模板|Electron后台框架系统
前一溜时间有给大家分享一个 electron+vite跨端短视频 项目.这次分享的是vite2.x和electron实现跨平台后台框架,支持国际化多语言配置.导航菜单+树形菜单两种路由菜单模式.展开/ ...
- 【C++】从零开始,只使用FFmpeg,Win32 API,实现一个播放器(一)
前言 起初只是想做一个直接读取视频文件然后播放字符动画的程序.我的设想很简单,只要有现成的库,帮我把视频文件解析成一帧一帧的原始画面信息,那么我只需要读取里面的每一个像素的RGB数值,计算出亮度,然后 ...