Ruby语法基础(三)

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

字符串

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

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

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

数组

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

基本用法

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

哈希

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

基本用法

  1. months = {
  2. :Jan=>1, #可以使用符号作为键值
  3. :Feb=>2,
  4. :Mar=>3
  5. }
  6. puts months[:Jan]
  7. # 遍历
  8. months.each {
  9. |key, value|
  10. puts key, value
  11. }
  12. # 筛选或者可以看成是map
  13. puts months.select{
  14. |key, value|
  15. key if value>1
  16. }
  17. # {:Feb=>2, :Mar=>3}

日期&时间

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

基本用法

  1. # 创建实例使用方法
  2. time1 = Time.new
  3. puts time1.inspect
  4. # 直接使用静态方法
  5. puts Time.now
  6. # 时间详情
  7. puts time1.year
  8. puts time1.month
  9. puts time1.day
  10. puts time1.hour
  11. puts time1.min
  12. puts time1.sec
  13. puts time1.to_a # 把时间信息转为数组
  14. puts time1.wednesday? # 判断是否为星期三,happy coding

范围

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

基本用法

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

IO

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

控制台操作

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

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

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

文件操作

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

  1. f = File.new('a.txt', 'r')
  2. puts f.read #全部读取
  3. f.close
  4. # 按行读取
  5. f = File.new('a.txt', 'r')
  6. f.each{
  7. |line|
  8. puts line
  9. }
  10. f.close
  11. # 写文件
  12. f = File.new('out.txt', 'w')
  13. f.write('hello world')
  14. f.close

目录

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

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

异常

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

基本用法

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

修复后重启

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

raise主动抛出异常

  1. begin
  2. raise 'my exception'
  3. rescue Exception => e
  4. puts e
  5. end

else

  1. begin
  2. puts 'hello world'
  3. rescue Exception=>e
  4. puts e
  5. else # 如果没有异常则执行
  6. puts 'No exception!'
  7. end

catch和throw可以跳出深层结构

  1. def promptAndGet(prompt)
  2. print prompt
  3. res = readline.chomp
  4. # 遇到!就抛出异常
  5. throw :myException if res =='!'
  6. return res
  7. end
  8. catch :myException do
  9. while true do
  10. puts promptAndGet('Please Enter a word:')
  11. end
  12. end
  13. 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. 读C#开发实战1200例子记录-2017年8月14日10:03:55

    C# 语言基础应用,注释 "///"标记不仅仅可以为代码段添加说明,它还有一项更重要的工作,就是用于生成自动文档.自动文档一般用于描述项目,是项目更加清晰直观.在VisualStu ...

  2. Nginx中配置undertow进行两个项目的动静分离配置

    #user nobody; worker_processes ; pid /var/run/nginx.pid; events { worker_connections ; } http { incl ...

  3. sed 详解【转】

    原文地址:http://www.cnblogs.com/sparkdev/archive/2017/07/10/7138073.html 基本命令格式 sed [常用选项] 命令文本 输入 常用选项 ...

  4. MySQL主从备份配置实例

    转载自:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0 ...

  5. es6 Map,Set 和 WeakMap,WeakSet

    这些是新加的集合类型,提供了更加方便的获取属性值的方法,不用像以前一样用hasOwnProperty来检查某个属性是属于原型链上的呢还是当前对象的.同时,在进行属性值添加与获取时有专门的get,set ...

  6. zjoi[ZJOI2018]胖

    题解: 因为n,m很大 所以复杂度应该是和m相关的 考虑到每个点的影响区间是连续的 就很简单了 区间查询最小值线段树维护(st表也可以) 然后注意一下不要重复算一个就可以了 max函数用templat ...

  7. 51Nod1601 完全图的最小生成树计数 Trie Prufer编码

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1601.html 题目传送门 - 51Nod1601 题意 题解 首先我们考虑如何求答案. 我们将所有 ...

  8. Python re模块, xpath 用法

    1.re正则的用法总结 (1). ^ 表示以哪个字符为开头      eg:  '^g' 表示以g开头的字符串      . 表示任意字符 '^g.d'  表示以g开头第二个为任意字符,第三个为b的字 ...

  9. springmvc基础使用配置

    前言 本案例是在idea编辑器下,maven管理项目的前提下. 步骤 1.新建maven项目 2.配置web.xml <?xml version="1.0" encoding ...

  10. Cloudera Manager的安装

    1.  cloudera manager的概念 简单来说,Cloudera Manager是一个拥有集群自动化安装.中心化管理.集群监控.报警功能的一个工具(软件),使得安装集群从几天的时间缩短在几个 ...