美文网首页
Ruby or Rails 学习总结 1

Ruby or Rails 学习总结 1

作者: Qo_Tn | 来源:发表于2020-03-30 11:34 被阅读0次

    Qo_Tn


    第一章 学习

    1.1 Ruby

    ruby 特性

    弱类型 语言

    1.3 下载安装Ruby 和 Rails

    终端 命令 :

    安装 rails gem install rails

    1.4 开发工具 RubyMine

    知了破解版

    1.5 手动编译Ruby程序

    终端 命令:

    编译: ruby 路径+**
    检查代码: ruby -c 文件名.rb
    打开警告: ruby -w 文件名.rb
    执行字面脚本:ruby -e 文件名.rb
    在行模式下运行:ruby -l 文件名.rb

    ruby -e 'print "Hello";print "Ruby"'
    ruby -le 'print "Hello";print "Ruby"'

    组合命令

    -cw -le

    1.6 实现计算器

    puts "Please input Numberl:"
    number1=gets
    puts "Please input a operator(+,-,*,/):"
    op=gets
    puts "Please input Number2:"
    number2=gets
    
    case op.chomp
      when "+"
        result=number1.to_i+number2.to_i
      when "-"
        result=number1.to_i-number2.to_i
      when
        result=number1.to_i*number2.to_i
      when
        result=number1.to_i/number2.to_i
    end
    
    puts "Result:#{number1.chomp}#{op.chomp}#{number2.chomp}=#{result}"
    

    第二章学习

    2.1 常量的使用

    定义方法(字母大写)

    '常量名(大写)"='值'

    相同名 警告错误,报错

    例子:

    PLANT=200
    CORPSE=10                                       
    puts "僵尸进攻一次,植物的生命是:"+(PLANT-CORPSE).to_s
    $!
    

    2.2 变量的使用

    定义变量

    局部变量必须以小写字母或者下划线开头
    局部变量 有自己的作用域

    例如:

    class Test
      _info="我是在类中被定义的局部变量"
      puts _info
    end
    
    module ModelInfo
      _info="我是被定义的模块中的局部变量"
      puts _info
    end
    
    def info
      _info="我是被定义的方法中的局部变量"
      puts _tinfo
    end
    

    全局变量

    1. 作用于全局,任何地方都可以定义
    2. 可以在类中访问,也可以在方法中访问
    3. 全局变量以“$”开头

    例如:

    $info="我是被定义的全局变量,是最顶层的变量,我的Fans最多"
    
    def infoQ
      tinfo="我是被定义的局部变量"
      puts tinfo
      puts $info
    end
    
    module ModelInfoQ
      _info="我是被定义的模块中的局部变量"
      puts _info
      puts $info
    end
    
    class TestQ
      _info="我是在类中被定义的局部变量"
      puts _info
      puts $info
    end
    
    puts $info  
    
    全局变量 说明
    $! 最近一次的错误信息
    $@ 错误产生的位置
    $_ gets最近读的字符串
    $. 解释器最近读的行数
    $& 最近一次与正则表达式佩佩的字符串
    $~ 作为字表达式组的最近一次匹配
    $n 最近匹配的第那个子表达式
    $= 是否区分大小写的标志
    $/ 输入记录分隔符
    $\ 输出记录分隔符
    $0 Ruby脚本文件名
    $* 命令行参数
    $$ 解释器进程ID
    $? 最近一次执行的子进程退出状态

    2.3 数据类型的使用

    数据类型

    三大数据类型 (数值型、范围、符号)

    数值型:整数、浮点数

    整数:Fixnum、Bignum

    新版本 2的30次方不在区分 .class 统一打印 Integer

    浮点型

    带有小数点的字符串,例如:f=3.12c

    范围 ('..' 或 '...')

    a..b 或 a....b

    a..b 定义的是从值a到值b的范围,包括值a,值b以及值a,值b中间的值
    a...b 定义的是从值a到值b的范围,包括值a,以及值a,值b中间的值,但不包括值b
    Ruby 中,范围是一个对象,是Range类的实例。

    迭代器(regect、select、each)

    regect:
    将该范围转换成一个数组,并删除掉满足条件的元素。
    select:
    将该范围转换成一个数组,只选择满足条件的元素。
    each:
    输出迭代范围中的每个元素。

    符号

    符号也是一个对象.
    符号对象是一个字符串,一个方法,一个类或者一个标识符的内部表示形式。
    创建符号对象就在对象名前面加上一个冒号':'就可以了。
    只要对象名相同,则产生的符号对象就相同。
    字符串和符号对象之间是一一对应的。
    字符串和符号对象就可以通过to_s和to_sym来进行相互转换。
    

    例如:

    dcy="我是你的忠实粉丝啊"
    ly=:"我是你的忠实粉丝啊" 
    puts dcy.to_sym==ly 
    puts ly.to_s==dcy   
    返回:
    true
    true
    

    符号对象还可以用 %s{表示法} 来创建

    例如

    dcy="我是你的忠实粉丝啊"
    ly=:dcy
    dcyandly=%s{dcy}
    puts ly==dcyandly
    返回 true
    

    2.4 算术运算符和赋值运算符

    算数运算符

    全局变量 说明 计算 结果
    + 加号 Z=2+1 Z的结果是:3
    - 减号 Z=2-1 Z的结果是:1
    * 乘号 Z=2*3 Z的结果是:6
    / 除号 Z=6/3 Z的结果是:2
    % 求余 Z=5%2 Z的结果是:1
    ** 乘方运算 Z=5**2 Z的结果是:25

    赋值运算符

    运算符 |   说明  |   计算  |   结果   |
    

    ----------|:----------:|----------|----------|
    = | 赋值 | Z=1 | Z的结果是:1 |
    += | 加法赋值 | Z=1, Z+=1 | Z的结果是:2 |
    -= | 减法赋值 | Z=3, Z-=1 | Z的结果是:2 |
    *= | 乘法赋值 | Z=2, Z*=3 | Z的结果是:6 |
    /= | 除法赋值 | Z=7, Z/=3 | Z的结果是:2 |
    %= | 求余赋值 | Z=2, Z%=2 | Z的结果是:0 |
    **= | 乘方赋值 | Z=2, Z**=2 | Z的结果是:4 |

    2.5 位运算符的使用

    位运算符

    首先将十进制的数字转换成二进制,然后才能进行按位运算。
    位运算符是对整数数组的位进行逻辑运算。

    位运算符 说明 计算 结果
    & 按位"与" Z=10&12 Z的结果是:8
    ^ 按位"异或" Z=10^12 Z的结果是:6
    按位"或" Z=10 12 Z的结果是:14
    ~ 按位"非" Z=~10 Z的结果是:-11
    << 按位向左移位 Z=12<<2 Z的结果是:48
    >> 按位向右移位 Z=10>>2 Z的结果是:2

    除了“~”是单目运算符,即需要一个操作数,而其他的都是双运算符,即需要两个操作数。

    2.6 比较运算符和逻辑运算符

    比较运算符

    比较运算符 说明
    > 大于
    < 小于
    <= 小于或者等于
    >= 大于或者等于
    == 等于
    != 不等于
    <=> 比较两个对象,分别返回1,0和-1
    === 当普通对象处于运算符的左边时,该运算符与“==”功能相同; 但左边的对象是一个Range对象,且右边对象包还在该Range内时,返回true,否则返回false
    =~ 正则表达式匹配
    !~ 正则表达式不匹配

    逻辑运算符

    逻辑运算符 说明
    and 按位"与"
    or 按位"异或"
    not 按位"或"
    && 逻辑"且"
    | 逻辑"或"
    ! 逻辑"非"

    2.7 三目运算符的使用

    第一个操作数为条件,如果第一个操作数成立,则返回一个值,否则返回另一个值。

    例子:condition?true_value:false_value

    2.8 表达式的返回值

    表达式是由数字、运算符、数字分组符号(括号)、自由变量和约束变量等排在一起来求数值的组合。
    在Ruby语言中,常量、变量、各种字面值、相关计算、if或者while等控制语句、类和方法的定义都可以称为是表达式。
    表达式的返回值无非就是有两种: 一种是有返回值的,另一种是无返回值的。

    例:

    score=569
    res=if score>600
          score.to_s+"考上复旦没问题"
        else
          score.to_s+"分,我很惭愧,我落榜了!"
        end
    puts res
    
    

    例2:

    score1=596
    res=while score1<600
          puts "我的分数差"+score.to_s+"不到六百"
          score+=1
        end
    puts res+"的值"
    

    2.9 并行赋值和嵌套赋值

    1. 并行赋值

      • 交换两个变量值,无需第三个变量。
      • 两边变量、值不等同,多余的会被设置为nil或忽略
      • 左边以*为前缀, 表示所有对应该变量的值以及后面的值将会组成一个数组,并赋给这个变量。
      • 右边以*为前缀, 则会将这个数组拆开,按元素的相应位置进行并行赋值。
        例如:
      c,d="我是变量c","我是变量d"
      puts "交换前的变量c"+c,"交换后的变量d"+d
      c,d=d,c
      puts "交换后的变量c"+c,"交换后的变量d"+d
      
      tianqi=["春天","夏天","秋天","冬天"] #(创建的数组)
      daibiao=["cyr代表温暖的春天(77·F)","wdc代表炎热的夏天(99`F)","wz代表凉爽的秋天(59·F)","yyl代表冷酷冬天(41·F)"]
      a,b=tianqi
      puts "a代表的是"+a,"b代表的是"+b
      a,*b=daibiao
      puts "a代表的是"+a+"\n数组b代表的是",b
      a,b="风雨哈佛路",*tianqi
      puts a,b
      
    2. 嵌套赋值

      • 把左边的一些变量用括号括起来,形成一个变量列表;与之对应的右边的值用中括号括起来形成一个子并行赋值的列表。

      例如:

      tianqi=["春天","夏天","秋天","冬天"]
      b,(c,d),e=tianqi
      puts "输出的b是"+b.to_s,"输出的c是"+c.to_s,"输出的d是"+d.to_s,"输出的e是"+e.to_s
      b,(c,*d),e="春天",["夏天","不冷不热天","秋天"],"冬天"
      puts "b="+b.to_s,"c="+c.to_s,d,"e="+e.to_s
      

    2.10 条件语句

    1. 条件语句

      • if (条件) then 代码块1 elseif (条件n) 代码块n else 代码块n+1 end
      • if 修饰语句
        例如:
      str=1
      if (str==1)
          puts "1月代表的是春天: 花香鸟语飘满村。细听来,句句是乡音。"
      end
      
      month=2
      mothinfo="春天"
      if (month<3)
      puts "2月份是:"+mothInfo
      
      • unless 如果...不,除非,除...之外 的意思。
      • unless (条件) then 代码块1 else 代码块2 end
      a=2
      unless a**5==32 then
          puts "a的5次方不是32"
      else
          puts "a的5次方是32" 
      end
      
      • case语句
      case 表达式        
          when 常量1,常量2...常量3 then
      代码块1  
          when 常量4,常量5...常量n then    
      代码块2        
      else    
      代码块3   
      end                 
      
      num=6
      case num    
          when 6
          puts "今天是周末"
          else
              puts "今天不是周末"
      end
      
      month=6
      case month
          when 1,2,3
              puts "春意盎然"
          when 4,5,6
              puts "烈日骄阳"
          when 7,8,9
              puts "秋高气爽"
          when 10,11,12
              puts "冬雪棉被"
          else
              puts "该月份已超出程序可以计算的范围"
      end
      

    2.11 循环语句

    1. while 循环语句

      • while (条件) do 代码块 end
      row=1
      while (row<=9) do
          row=row+1
          puts "第"+(row-1).to_s+"次被打印的是:"+row.to_s
      end
      
    2. until 循环语句

      • 与while 语句作用相反
      row=0
      flh=["红儿","橙儿","黄儿","绿儿","青儿","蓝儿","紫儿"]
      until (row>=7) do
          flh.each do |h|
              row=row+1
              puts "王母娘娘的第"+row.to_s+"个女儿的名字是:"+h.to_s
          end
      end 
      
    3. for...in 循环语句

      • for 自定义名称 in Array|Hash do 代码块1 end
      • for...in 语句主要是遍历数组和Hash对象的元素
      shiren=["蒹葭苍苍","白露为霜","所谓伊人","在水一方","乘兴见之","脸胖且长","乘兴会之","腰如水缸"]#创建数组
      for shiju in shiren do
          puts shiju
      end
      
    4. 迭代器

      • 主要用于将数组、Hash对象和普通对象的变量进行迭代输出。
      • array.each do |定义的变量名| 代码块 end
        例如:
      names=["琵琶语","东风破","小酒窝","擦身而过"]
      names.each do |name|
          puts name
      end 
      
    5. loop

      • loop 是一个最基本的迭代器,使用loop语句可以执行循环功能,但是必须注意的是: 使用loop语句进行循环时,程序会无限次的循环指定的代码,因此必须使用break语句来结束这个循环。

    2.12 跳转语句

    1. break、next、redo、return
      • break 跳出整个循环,嵌套中跳出嵌套(一层)
      • next 结束循环语句,next只终止当前的循环,进行下一个循环
      • redo 类似于next,不同的是,使用redo 语句,不用检查循环条件是否成立,就执行下一次循环。
      • return 用来结束循环语句,但是return 主要用来结束一个方法,并且针对这个方法有返回值。
    例如: 
    
    ```
    i=0
    loop{
        puts "i的值是"+i.to_s
        i+=1
        if (i>=3)
            break
        end
    }
    puts "--------------------------------------------------------------"
    music=1
    while (music<=5) do
        if (music==5)
            music+=1
            next
        end
        puts "《简爱》这首歌曲已循环播放了"+music.to_s+"次"
        music+=1
        yinyue=1
        while (yinyue<=3) do
            if (yinyue==2) 
                yinyue+=1
                next
            end
            puts "《曲终人散》这首音乐已经循环播放了"+yinyue.to_s+"次"
            yinyue+=1
        end
    end
    puts "--------------------------------------------------------------"
    i=1
    while (i<=5) do
        if (i==5)
            i+=1
            redo
        end
        puts "这是第"+i.to_s+"次循环"
        i+=1    
    end
    puts "--------------------------------------------------------------"
    
    def search(weatherName)
        weathers=["春天","夏天","秋天","冬天"]
        for weather in weathers do
            puts weather
            if (weather==weatherName) then
                return true
            else
                return false
            end
           end
    end
    if search("春天") then
        puts "这个月的天气是春天"
    else
        puts "这个月的天气不是春天"
    end
    
    ```
    

    相关文章

      网友评论

          本文标题:Ruby or Rails 学习总结 1

          本文链接:https://www.haomeiwen.com/subject/xegmuhtx.html