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!'
原文地址:https://www.cnblogs.com/fanghao/p/7883657.html