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。

  1. arr=[1,2]
  2. arr1=[];
  3. p arr.object_id #47376880589400
  4. p arr1.object_id #47376880589380

equal?方法用来判断两个对象是否为同一个对象(id是否相同)

  1. arr=[1,2]
  2. arr1=[];
  3. arr2=arr;
  4. p arr.equal? arr1 #false
  5. p arr.equal? arr2 #true

ruby使用==来比较将个对象的值是否相等

  1. str="foo"
  2. st="f"+"o"+"o"
  3. s="bar"
  4. p str==st #true
  5. p str==s #false

ruby还提供了eql?方法来判断两个对象的值是否相等,==和Object类定义的

方法,大部分情况下他们的执行结果时一样的,但是也有例外,数值类会重新定义eql?

方法。

  1. p 1.0 == 1 #true
  2. p 1.0.eql? 1 #true

1.2 变量

Ruby中有四种变量,变量的命名决定了变量的种类

变量 命名规则 eg
局部变量 以英文小写字母或_开头 foo、_area
全局变量 以$开头 $foo
类变量 以@@开头 @@foo
实例变量 以@开头 @foo、@name

全局变量和局部变量

全局变量在不管在程序的那部分使用都是相同,局部变量在当前作用域中生效。

eg:在其他库中修改全局变量和局部变量的值

sub.rb修改变量的值

  1. _local="a"
  2. $global=123

test.rb中引用sub.rb

  1. _local="local"
  2. $global="global"
  3. require_relative 'sub'
  4. p _local #local
  5. p $global #123

局部变量为不同的模块所私有,所以没有改变,全局变量整个程序共有,

所以值被修改了。局部变量在数次赋值的时候初始化,引用了未初始化的局部变量程序会报错。

1.3 常量

常量和变量类似,用来保存一个对象的值,不过常量初始化后就不能改变了

常量以大写字母开头,ARGV、RUBY_VERSION都时与定义的常量。

1.4 保留字

Ruby中保留字不能用来作标识符。常见的保留字有 end、next、def、class等。

原则上来说我们在给变量和常量设置标识符时不要使用和保留字相近的单词。

1.5 多重赋值

  1. a=1
  2. b=2
  3. c=3

可以合并为

  1. a,b,c=1,2,3
  2. puts a #1
  3. puts b #2
  4. puts c #3

赋值时给变量前面加上*,该变量可以用来收集为分配的值

  1. a,b,*c=1,2,3,4
  2. p [a,b,c] #c=[3,4]
  3. a,*b,c=1,2,3,4
  4. p [a,b,c] #b=[2,3]

使用多重赋值交换两个变量的值

  1. a,b=1,2
  2. a,b=b,a
  3. p [a,b] #[2,1]

使用数组进行多重赋值

  1. arr=[1,2]
  2. a,b=arr
  3. p a #1
  4. p b #2
  5. #只获取数组中的一个值
  6. c,=arr
  7. p c #1

2.条件判断

ruby中的条件语句有if、unless、case.他们根据判断条件的值执行不同的操作,

判断条件总是返回true或false.

ruby中的真假值

真假值 eg
true false和nil以外的所有对象
false false、nil

ruby中用后来进行条件比较的有>、<、==等比较运算符,逻辑运算符&&、||、!,还有一些方法:

eg:

  1. p /Ruby/ =~ "Ruby" #=> true
  2. p "dasdsa".empty? #=>fasle

一般返回真假值的方法都要以?结尾。

if语句(then可以省略) 条件为真时执行对象的语句

  1. if 条件 then
  2. 处理程序
  3. elsif 条件 then
  4. 处理程序
  5. else
  6. 处理程序
  7. end

eg:

  1. a=1;
  2. if a<1 then
  3. print "a<1"
  4. elsif a<2 then
  5. print "a<2" #=>a<2
  6. else
  7. print "a大于等于2"
  8. end

unless语句 条件为假时执行对象的语句

  1. unless 条件
  2. 条家为假的处理程序
  3. else
  4. 条件为真的处理语句
  5. end

eg:

  1. a=10
  2. unless a!=10
  3. print "a等于10" #=>a等于10
  4. else
  5. print "a不等于10"
  6. end

case语句

  1. case 比较对象
  2. when 1 then
  3. 处理1
  4. when 2 then
  5. 处理2
  6. when 3 then
  7. 处理3
  8. else
  9. 处理4
  10. end

eg:

  1. tags=["A","B"]
  2. tags.each do |tag|
  3. case tag
  4. when "a","A"
  5. puts "tags has 'A'or'a'"
  6. when "b","B"
  7. puts "tags has 'B'or'b"
  8. else
  9. puts ""
  10. end
  11. end

case语句在比较值相等时采用的时===,如上面的代码的when等价于,其中tag为右边

  1. if "a"===tag||"A"===tag
  2. puts "tags has 'A'or'a'"
  3. end

当时=的左边时数值或者字符串时,和没有区别。此外===还有其他用途

  1. a=/ruby/
  2. p a==="ruby" #true
  3. p String==='sad' #true
  4. p (1..2) ===2 #true

if修饰符和unless修饰符

if和unless可以像下面这样使用

  1. a,b=2,1
  2. puts "a比b大" if a>b # a比b大

等价于

  1. a,b=2,1
  2. if a>b
  3. puts "a比b大"
  4. end

3.循环

Ruby中实现循环的方法有两种:

  1. 使用循环语句

  2. 使用方法实现循环

六种循环语句

1.times方法

  1. times使用单纯执行一定次数的处理。

语法:

  1. 循环次数.times do
  2. 希望循环的处理
  3. end

doend可以用{}代替

  1. 循环次数.times {
  2. 希望循环的处理
  3. }

times方法也可以获取快中当前的执行次数

  1. 5.time do |i|
  2. ~~~
  3. end

eg:

  1. 10.times do |i|
  2. puts "第#{i}次循环"
  3. end

for语句

  1. for 变量 in 开始数值..结束数值 do
  2. 希望循环的处理
  3. end

eg:求1到5这些数字加起来的和

  1. sum=0;
  2. for i in 1..5
  3. sum+=i;
  4. end
  5. puts sum #=>15

times方法和for语句的区别

  1. for语句循环的开始和结束值可以任意指定。times方法的循环一定时从0开始的。

eg:遍历数组对象

  1. arr=["hello",123]
  2. for i in arr
  3. print "#{i} " #hello 123
  4. end

while语句

不论那种类型的循环,while语句都可以胜任.

语法

  1. while 条件 do
  2. 希望循环的处理
  3. end

eg:输出1~9的数字

  1. i=1
  2. while i<10 do
  3. puts i #输出1~9
  4. i+=1
  5. end

until语句

  1. 当不满足条件时执性循环语句
  2. 语法:
  3. until 条件 do
  4. 希望循环的处理
  5. end

eg:计算从0开始的整数的和,当和超过55结束

  1. sum 1=0
  2. sum,i=0,0
  3. until sum>50
  4. sum+=i
  5. i+=1
  6. end
  7. puts sum #55

each方法

  1. each方法与for语句类似,rubyfor语句是用each方法实现的。
  2. 语法:
  3. 对象.each do |变量|
  4. 希望循环的处理
  5. end

eg:遍历数组

  1. arr=[1,2,3]
  2. arr.each do |i|
  3. puts i;
  4. end

eg:打印0~10之间的数字

  1. (0..10).each do |i|
  2. puts i #1 .... 10
  3. end

loop方法

  1. loop是一种没有终止条件就会一直执行的循环的处理。
  2. 语法:
  3. loop do
  4. puts "ruby"
  5. end

一般都要在某种条件下breadk跳出循环.负责会发生死循环。

4.循环控制

命令 用途
break 跳出循环
next 跳到下一次循环

eg:打印0-5的数字

  1. (0..10).each do |i|
  2. puts i #1 .... 10
  3. if i==5 then
  4. break
  5. end
  6. 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. 阳明-K8S训练营全部文档-2020年08月11日14:59:02更新

    阳明-K8S训练营全部文档 Docker 基础 简介 安装 基本操作 Dockerfile Dockerfile最佳实践 Kubernetes 基础 简介 安装 资源清单 Pod 原理 Pod 生命周 ...

  2. 【Azure 事件中心】EPH (EventProcessorHost) 消费端观察到多次Shutdown,LeaseLost的error信息,这是什么情况呢?

    问题详情 使用EPH获取Event Hub数据时,多次出现连接shutdown和LeaseLost的error  ,截取某一次的error log如: Time:2021-03-10 08:43:48 ...

  3. SQL语句练习(进阶版)

    学生数据库中有三个基本表(关系)如下: 学生表S(Sno,Sname,Age,Sex,SD) 课程表C(Cno,Cname, Teacher) 选课表SC(Sno,Cno,Grade) 请用SQL语言 ...

  4. 关于 下载 nfs-utils时的 gssproxy conflicts with selinux-policy-3.13.1-102.el7.noarch 错误

    使用 yum install nfs-utils -y 时 出现如下错误: 错误:gssproxy conflicts with selinux-policy-3.13.1-102.el7.noarc ...

  5. 1. Intellij IDEA导入,主题修改,布局界面+部分工具栏菜单介绍

    Project 和module 的区别 module 相当与eclispe的项目project 相当与eclpise的工作空间 主题的修改 Setting的快捷键:Ctrl+shift+S

  6. python进阶(16)深入了解GIL锁(最详细)

    前言 python的使用者都知道Cpython解释器有一个弊端,真正执行时同一时间只会有一个线程执行,这是由于设计者当初设计的一个缺陷,里面有个叫GIL锁的,但他到底是什么?我们只知道因为他导致pyt ...

  7. JavaScript课程——Day07(对象简介、Math对象、时间对象、字符串对象)

    1.对象简介 在javaScipt中,一切皆为对象或者皆可以被用作对象 宿主对象:window,document 内置对象:Number  String  Boolean  Array数组  Obje ...

  8. 漫谈SCA(软件成分分析)测试技术:原理、工具与准确性

    摘要:本文介绍了SCA技术的基本原理.应用场景,业界TOP SCA商用工具的分析说明以及技术发展趋势:让读者对SCA技术有一个基本初步的了解,能更好的准确的应用SCA工具来发现应用软件中一些安全问题, ...

  9. (转)Amazon Aurora MySQL 数据库配置最佳实践

    转自:https://zhuanlan.zhihu.com/p/165047153 Amazon Aurora MySQL 数据库配置最佳实践 AWS云计算 ​ 已认证的官方帐号 1 人赞同了该文章 ...

  10. POJ 1201 差分约束(集合最小元素个数)

    题意:       给你一个集合,然后有如下输入,a ,b ,c表示在范围[a,b]里面有至少有c个元素,最后问你整个集合最少多少个元素. 思路:       和HDU1384一模一样,首先这个题目可 ...