Ruby语法基础(三)

​ 在前面快速入之后,这次加深对基本概念的理解。

字符串

​ Ruby字符串可以分为单引号字符串和双引号字符串,单引号字符串效率更高,但双引号的支持转义和运行

puts '单引号字符串"原样输出"'
var = 'hello'
puts "双引号可以实现转义\\与运算#{var}"
#运算结果
单引号字符串"原样输出"
双引号可以实现转义\与运算hello

​ Ruby字符串有unpack命令,可以把字符串作为一种码做各种解释

数组

​ Ruby中的array和Python的list类似,是任何对象的有序集合。

基本用法

a1 = [1,1,2,3,4]
a2 = [2,3,4,5]
# puts a1 & a2 # 取集合交集,去重
# puts a1 | a2 # 取集合并集,去重
a1 << 6 # 尾部添加元素
puts a1.map{
|item|
item * 2
} # map方法返回一个新的数组 # 数组遍历
a1.each {
|item|
puts item
}
puts a1.hash # 算哈希值
puts a1.uniq # 返回去重后的新数组

哈希

​ Ruby的哈希数据类型类似Python中的字典,采用键-值的方式存储

基本用法

months = {
:Jan=>1, #可以使用符号作为键值
:Feb=>2,
:Mar=>3
}
puts months[:Jan]
# 遍历
months.each {
|key, value|
puts key, value
}
# 筛选或者可以看成是map
puts months.select{
|key, value|
key if value>1
}
# {:Feb=>2, :Mar=>3}

日期&时间

​ ruby使用Time类表示时间和日期,基于操作系统提供的时间接口

基本用法

# 创建实例使用方法
time1 = Time.new
puts time1.inspect
# 直接使用静态方法
puts Time.now # 时间详情
puts time1.year
puts time1.month
puts time1.day
puts time1.hour
puts time1.min
puts time1.sec
puts time1.to_a # 把时间信息转为数组
puts time1.wednesday? # 判断是否为星期三,happy coding

范围

​ range是常用的数据类型,用于列举连续的序列。

基本用法

puts (1..5).size # 5
puts (1...5).size # 4,不包括5本身 puts ('a'..'g') #字符遍历
('aaa' .. 'abd').each{
|item|
puts item # 按字典序自动计算
}

IO

​ Ruby的IO在内核模块中实现,IO类提供所有的I/O方法

控制台操作

  • puts会做转义,每行末自动添加换行

  • gets,可以获取来自STDIN的标准输入

    puts 'Please enter your name'
    name = gets
    puts "Hello #{name}"
  • print与puts类似,但不会自动换行,转义也比较弱

文件操作

​ 可以使用FIle类直接对文件进行读写

f = File.new('a.txt', 'r')
puts f.read #全部读取
f.close # 按行读取
f = File.new('a.txt', 'r')
f.each{
|line|
puts line
}
f.close # 写文件
f = File.new('out.txt', 'w')
f.write('hello world')
f.close

目录

​ Ruby把目录操作抽象成了Dir类,使用跟shell类似

# 创建目录,设置权限
Dir.mkdir( 'mynewdir',777)
Dir.delete('./mynewdir') #删除目录
Dir.chdir('/usr/bin') #改变目录
print Dir.pwd #打印当前目录
#列举当前目录所有项
puts Dir.entries('./')

异常

​ Ruby在begin/end的一个代码块中附上可能抛出的异常的代码,并且做出处理

基本用法

begin
1/0 # 测试代码段
rescue # 异常捕获后的处理
puts $! #表示异常信息divided by 0
puts $@ #表示异常出现的代码位置
ensure
puts '不管有没有异常,进入该代码块'
end #结束

修复后重启

begin
Dir.mkdir( 'mynewdir',777)
rescue
Dir.delete('mynewdir')
retry # 处理异常之后,重新执行begin/end代码块
end

raise主动抛出异常

begin
raise 'my exception'
rescue Exception => e
puts e
end

else

begin
puts 'hello world'
rescue Exception=>e
puts e
else # 如果没有异常则执行
puts 'No exception!'
end

catch和throw可以跳出深层结构

def promptAndGet(prompt)
print prompt
res = readline.chomp
# 遇到!就抛出异常
throw :myException if res =='!'
return res
end catch :myException do
while true do
puts promptAndGet('Please Enter a word:')
end
end
puts 'finish!'

Ruby语法基础(三)的更多相关文章

  1. Ruby语法基础(二)

    Ruby语法基础(二) 继续ruby的学习,这次主要把目光放到运算符,条件判断,循环,方法,以及其他ruby特有的基本概念上 运算符 算术运算符:+,-,/,%,**,值的注意的是,ruby中一切皆为 ...

  2. Ruby语法基础(一)

    Ruby语法基础(一) Ruby是一种开源的面向对象程序设计的服务器端脚本语言,最初由松本行弘(Matz)设计开发,追求『快乐和生产力』,程序员友好型,被称为『human-oriented langu ...

  3. 3.ruby语法基础,全部变量,实例变量,类变量,局部变量的使用和注意的要点

    1.ruby的全局变量的概念和Java的全局变量的概念不同, ruby的全局变量是以$符号开头的,如果给全局变量的初始化值为nil会出现警告. 赋值给全局变量,这是ruby不推荐的,这样会使程序变得很 ...

  4. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  5. Python基础语法(三)

    Python基础语法(三) 1. 数值型数据结构 1.1 要点 在之前的博客也有提到,数值型数据结构在这里就不过多介绍了.在这里提及一些需要知道的知识点. int.float.complex.bool ...

  6. Java04-Java语法基础(三)流程控制

    Java04-Java语法基础(三)流程控制 一.数据类型的转换 1.自动转换:在赋值运算中,占字节数大的类型会自动向字节小的类型转换 double d1 = 3.14; int t1 = d1; 2 ...

  7. ruby之基础语法

    ruby语法之哈希 =>相当于python的字典 ruby语法之数组 =>相当于python的列表 举例: gitaly= Hash.new #建立新Hash类型 gitaly['firs ...

  8. 学习java之基础语法(三)

    学习java之基础语法(三) java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运 ...

  9. Golang 基础之基础语法梳理 (三)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...

随机推荐

  1. java 使用jdbc连接Greenplum数据库和Postgresql数据库

    1.公司使用的Greenplum和Postgresql,确实让我学到不少东西.简单将使用jdbc连接Greenplum和Postgresql数据库.由于使用maven仓库,不能下载Greenplum的 ...

  2. Elasticsearch集群

    详细Elasticsearch安装: https://www.cnblogs.com/littlehb/p/8406378.html 安装之前需先优化内核: https://www.cnblogs.c ...

  3. SignalRMvc的简单例子

    1.介绍 我们知道传统的http采用的是“拉模型”,也就是每次请求,每次断开这种短请求模式,这种场景下,client是老大,server就像一个小乌龟任人摆布,很显然,只有一方主动,这事情就没那么完美 ...

  4. IsNullOrEmpty和IsNullOrWhiteSpace的区别

    IsNullOrEmpty // string /// <summary>Indicates whether the specified string is null or an < ...

  5. noip飞扬的小鸟

    题解: 挺简单的题目 f[i][j]表示x坐标为i,y坐标为j的最小值 会发现那个东西是个完全背包 从f[i][j-a[i]]转移一下就是O(1)转移的了 另外上界为m这个要特判一下 我把sum[a[ ...

  6. alpha冲刺4/10

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺4 团队部分 后敬甲 过去两天完成了哪些任务 文字描述 主页部分图标的替换 -拍照按钮的设计和测试 GitHub代码 ...

  7. mysql-索引-日志

    索引:基于元数据之上的在某个字段或多个字段取出来,索引是加速读操作的,但对写操作时有副作用的 BTree 索引:抽取出来重新排序,是左前缀索引每一个叶子结点到根结点的距离相同: 哈希索引:基于键查找值 ...

  8. day66 模板小结 [母板继承,块,组件]

    小结: day65 1. 老师编辑功能写完 1. magic2函数 --> 用两层for循环解决 全栈8期之殇 问题 2. 模板语言 in 语法 {% if xx in xx_list %} { ...

  9. css3 webkit-box的用法

    webkit-box 1.之前要实现横列的web布局,通常就是float或者display:inline-block; 但是都不能做到真正的流体布局.至少width要自己去算百分比.2.flexibl ...

  10. P2280 [HNOI2003]激光炸弹(二维前缀和)

    题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(n≤10000)个目标,用整数xi,yi(0≤xi,yi≤5000)表示目标在地图上的位置,每个目标都有一个价 ...