zoukankan      html  css  js  c++  java
  • ruby基础(一)

    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。

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

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

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

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

    str="foo"
    st="f"+"o"+"o"
    s="bar"
    p str==st   #true
    p str==s    #false
    

    ruby还提供了eql?方法来判断两个对象的值是否相等,==和Object类定义的
    方法,大部分情况下他们的执行结果时一样的,但是也有例外,数值类会重新定义eql?
    方法。

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

    1.2 变量

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

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

    全局变量和局部变量

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

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

    _local="a"
    $global=123
    

    test.rb中引用sub.rb

    _local="local"
    $global="global"
    require_relative 'sub'
    p _local    #local
    p $global   #123
    

    局部变量为不同的模块所私有,所以没有改变,全局变量整个程序共有,
    所以值被修改了。局部变量在数次赋值的时候初始化,引用了未初始化的局部变量程序会报错。

    1.3 常量

    常量和变量类似,用来保存一个对象的值,不过常量初始化后就不能改变了
    常量以大写字母开头,ARGV、RUBY_VERSION都时与定义的常量。

    1.4 保留字

    Ruby中保留字不能用来作标识符。常见的保留字有 end、next、def、class等。
    原则上来说我们在给变量和常量设置标识符时不要使用和保留字相近的单词。

    1.5 多重赋值

    a=1
    b=2
    c=3
    

    可以合并为

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

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

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

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

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

    使用数组进行多重赋值

    arr=[1,2]
    a,b=arr
    p a  #1
    p b  #2
    #只获取数组中的一个值
    c,=arr
    p c  #1
    

    2.条件判断

    ruby中的条件语句有if、unless、case.他们根据判断条件的值执行不同的操作,
    判断条件总是返回true或false.

    ruby中的真假值

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

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

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

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

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

    if 条件 then
      处理程序
    elsif 条件 then
      处理程序
    else 
       处理程序
    end
    

    eg:

    a=1;
    if a<1 then
      print "a<1"
    elsif a<2 then
      print "a<2"     #=>a<2
    else 
      print "a大于等于2"
    end
    

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

    unless 条件
     条家为假的处理程序
    else
      条件为真的处理语句
    end
    

    eg:

    a=10
    unless a!=10
      print "a等于10"  #=>a等于10
    else
      print "a不等于10"
    end
    

    case语句

    case 比较对象
    when 值1 then
       处理1
    when 值2 then
       处理2
    when 值3 then
       处理3
    else
       处理4
    end
    

    eg:

    tags=["A","B"]
    tags.each do |tag|
      case tag
      when "a","A"
        puts "tags has 'A'or'a'"
      when "b","B"
        puts "tags has 'B'or'b"
      else
        puts ""
      end
    end
    

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

    if "a"===tag||"A"===tag
       puts "tags has 'A'or'a'"
    end
    

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

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

    if修饰符和unless修饰符

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

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

    等价于

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

    3.循环

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

    1. 使用循环语句

    2. 使用方法实现循环

    六种循环语句

    1.times方法

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

    语法:

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

    doend可以用{}代替

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

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

    5.time do |i|
        ~~~
    end
    

    eg:

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

    for语句

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

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

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

    times方法和for语句的区别

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

    eg:遍历数组对象

    arr=["hello",123]
    for i in arr
      print "#{i} "  #hello 123
    end
    

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

    语法

    while 条件 do
        希望循环的处理
    end
    

    eg:输出1~9的数字

    i=1
    while i<10 do
      puts i  #输出1~9
      i+=1
    end
    

    until语句

    当不满足条件时执性循环语句
    语法:
    until 条件 do
        希望循环的处理
    end    
    

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

    sum 1=0
    sum,i=0,0
    until sum>50
      sum+=i
      i+=1
    end
    puts sum  #55
    

    each方法

    each方法与for语句类似,ruby中for语句是用each方法实现的。
    语法:
    
    对象.each do |变量|
         希望循环的处理
    end
    

    eg:遍历数组

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

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

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

    loop方法

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

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

    4.循环控制

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

    eg:打印0-5的数字

    (0..10).each do  |i|
      puts i  #1  .... 10
      if i==5 then
        break
      end
    end
    
  • 相关阅读:
    Vue.js
    Spark Streaming自定义Receiver
    Hive UDF函数
    HBase表预分区与压缩
    Hive映射HBase表的几种方式
    Spark源码阅读之存储体系--存储体系概述与shuffle服务
    Spark Streaming实时写入数据到HBase
    基于Spark的用户行为路径分析
    Spark Streaming消费Kafka Direct方式数据零丢失实现
    CountDownLatch如何使用
  • 原文地址:https://www.cnblogs.com/yiluhuakai/p/9414740.html
Copyright © 2011-2022 走看看