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. 使用循环语句

  2. 使用方法实现循环

六种循环语句

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基础(一)的更多相关文章

  1. Ruby基础教程

    一.Ruby基础知识 1.关于Ruby Ruby是脚本语言 Ruby是面向对象语言 Ruby是跨平台语言 Ruby是开放源码软件 2.Ruby入门书籍推荐 <Ruby.Programming向R ...

  2. 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充

    https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...

  3. ruby基础(四)

    ruby基础知识 模块 模块是ruby的特色功能之一.如果说类是事物的实体以及行为,那么模块表现的 就是事物的行为部分,模块和类有以下两点不同: 模块不能拥有实例 模块不能被继承 模块的使用方法 mo ...

  4. ruby基础语法

    首发:个人博客,更新&纠错&回复 学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}. 这种事情毫无技术含量又毫无乐趣可言,但极 ...

  5. Ruby基础类型,动态特性,代码块

    #Ruby内置基础数据类型 NilClass,TureClass,FalseClass,Time,Date,String,Range,Struct,Array,Hash #Numerice 1.分为I ...

  6. Ruby 基础教程 第二部分 Ruby 的基础 第4章

    第二部分 Ruby 的基础 第4章~第6章 这一部分是 Ruby 编程需要遵守的规则. 第四章 对象,变量与常量 对象 & 类 对象的常见种类: 数值对象 字符串对象 数组.散列对象 正则表达 ...

  7. Ruby 基础教程 第一部分总结

    第一部分:Ruby 初体验 第一章: Ruby 初探 前言 开头的这一章节讲了一些十分基础的内容,重要的几个话题有: ruby 命令的执行方法 对象.方法的概念 常见的打印方法 ruby 命令的执行方 ...

  8. ruby基础(二)

    ruby语法基础 1.方法 方法时对象定义的与该对象相关的操作.在Ruby中,对象的所有的操作都被封装成 方法. 语法糖:语法糖是一种为了照顾一般人的习惯而产生的特殊语法. ruby中一切数据都是对象 ...

  9. ruby基础(三)

    类和模块 1.类 类是面向对象中一个重要的术语.我们可以把类看作是对象的抽象, 所有的这类对象都有这些特征.而对象则是类的具体实现,按照类的要求创建的 对象就是该类的对象.类就像对象的雏形一样,决定了 ...

随机推荐

  1. BUUCTF 基础CODE REVIEW

    1.说明: 题目来自于BUUCTF 的基础部分,内容就如题,是一个代码审计.代码如下: <?php /** * Created by PhpStorm. * User: jinzhao * Da ...

  2. B. 【例题2】移位包含

    解析 判断是否是子串,可以将这个一个环 #include <bits/stdc++.h> using namespace std; int f = 0; string a, b; int ...

  3. 【Django学习笔记】-环境搭建

    对于初学django新手,根据以下步骤可以快速进行Django环境搭建 虚拟环境创建 使用virtualenv创建并启用虚拟机环境 ,关于virtualenv可参考https://www.yuque. ...

  4. Android Studio的基本开发环境,配置阿里云源

    原创文章,转发请注明出处. 安装Android Studio 安装文件下载地址:https://developer.android.google.cn/studio/ 下载Gradle 由于国内的网络 ...

  5. 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...

  6. 03.ElementUI源码学习:代码风格检查和格式化配置(ESlint & Prettier)

    书接上文.在团队协作中,为避免低级Bug.以及团队协作时不同代码风格对彼此造成的困扰与影响,会预先制定编码规范.使用 Lint工具和代码风格检测工具,则可以辅助编码规范执行,格式化代码,使样式与规则保 ...

  7. 逆向初级-PE(五)

    5.1.PE文件结构 1.什么是可执行文件? 可执行文件(executable fle)指的是可以由操作系统进行加载执行的文件. 可执行文件的格式: Windows平台: PE(Portable Ex ...

  8. 这可能是最容易理解的 Go Mutex 源码剖析

    Hi,大家好,我是 haohongfan. 上一篇文章<一文完全掌握 Go math/rand>,我们知道 math/rand 的 global rand 有一个全局锁,我的文章里面有一句 ...

  9. 前端框架之争丨除了Vue、Angular和React还有谁与之争锋

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/most-popular-frontend-f ...

  10. Oracle-DG最大保护模式下,dg备库出现问题对主库有什么影响?

    一.需求 疑问?Oracle最大保护模式下,dg备库出现问题,影响主库吗? 我们都知道Oracle最大保护模式的意思是oracle不允许数据丢失,1条记录都不行! 那么备库有问题? oracle主库还 ...