zoukankan      html  css  js  c++  java
  • Ruby语法基础(三)

    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!'
    
  • 相关阅读:
    hibernate对应关系详解(转)
    mybatis genertor两种使用方式(文件+项目)
    YII2 union 不同数据结构时 解决方案
    Yii2 分表后 使用 union all 分页实现代码
    Beyond Compare 4.2.10手动破解
    Xshell 6+Xftp 6官方下载免费版
    Navicat Premium
    yii2的Console定时任务创建
    内嵌多个youtube视频并展现该频道所有视频列表
    video.js 动态获取URL 并播放youtube视频
  • 原文地址:https://www.cnblogs.com/fanghao/p/7883657.html
Copyright © 2011-2022 走看看