• 《Rubu基础教程第五版》第五章笔记 条件判断


    条件判断 if unless case  比Python复杂,Python就一个if

    32
    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ cat ad2pingcheng.rb 
    ad = ARGV[0].to_i
    
    pingcheng = ad - 1988
    p pingcheng
    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ 
    

    Ruby中的条件

    Ruby中的假只有nil与false ,另外的都是真

    返回真假的方法后面都带?问号

    逻辑运算符  && || ! 相同与 and or not 这个Ruby里面也有,单优先级比较低

    if语句,跟shell脚本比较像,有一个then 但可以省略,shell里面不可以省略

    if condition then

        runing

    elsif condition r=then

       runing

    else

       runing

    end

    上示例代码

    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ cat if_elsif.rb 
    a = 10
    b = 20
    if a > b then
      puts "a比b大"
    elsif a< b then
      puts "a比b小"
    else
      puts "a与b相等"
    end
    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ 
    

    unless 语句

    unless condition then

       runing

    end

    代码如下

    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ cat unless.rb 
    a = 10
    b = 20
    unless a > b then
      puts "a不比b大"
    else
      puts "else这里来了"
    end
    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ 
    

     unless没有elsif的选项

    case 语句  这里的then也可以省略,感觉ruby的then差不多都可以省略

    case 对象

    when 值1 then

      running

    when 值2 then

      runing

    when 值3,值4 then

      running

    else

      running

    end

    when里面可以添加多个选项,只要适配都会输出,第一次匹配过以后,第二次同样的值也不会匹配

    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ cat case.rb 
    
    tags = ["A", "IMG", "PRE" ]
    tags.each do |tagname|
      case tagname
      when "p", "A", "IMG"
        puts "#{tagname} has child"
      else
        puts "#{tagname} cannot be used"
      end
    end
    

    case还可以直接适配对象的是否是该类的实例

    item is String
    item is Object
    item is Object
    item is Object
    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ cat case_class.rb 
    arr = ["a", 1, [], nil]
    
    arr.each do |item|
      case item
      when String then
        puts "item is String"
      when Object then
        puts "item is Object"
      when Numeric then
        puts "item is a Numeric"
      else
        puts "item is someting"
      end
    end
    shijianzhongdeMacBook-Pro:chapter_5 shijianzhong$ 
    

     经过测试,这个类的范围要写的少,我写的比较大,用Object,直接把基本的实例都包含进去了,说明父类也可以

    书中有一个很好的通过正则的方式匹配的代码,抄写一下

    text.each_line do |line|
      case line
      when /^From:/i then
        puts "发现收件人信息"
      when /^To:/! then
        puts "发现收件人信息"
      when /^Subject:/i then
        puts "发现主题信息"
      when /^$/
        puts "头部解析完毕"
      else
        exit
      end
    end
    

     可以通过匹配每一行的信息来判断邮件的头信息

    ===与case

    ==双=号表示两边值是否相等

    但===这个可以跟=~一样来完成正则匹配,还可以判断右边的对象是不是左边的值

    >> p /zz/ === "zyzzy"
    true
    => true
    >> p String  === "zyzzy"
    true
    => true
    >> p (1..5) === 3
    true
    => true
    >> 
    

     所有就有了下面的case 语句转换成if语句的写法

    case value

    when A then

        ...

    when B then

       ...

    else

      ...

    end

    转换成if的格式

    if A ===  value then

      ..

    elsif B === value then

     ...

    else

      ...

    end

    if 修饰符 与 unless 修饰符

    >> a = 1 if 1>2
    => nil
    >> a
    => nil
    >> a
    => nil
    >> a = 1 unless 1>2
    => 1
    >> a
    => 1
    >> 
    

     前面一个执行条件,只有后面的条件满足,前面的才执行

    补充知识

    对象的同一行  通过.object_id或__id__可以查看对象的id,好比Python中的id函数

    通过.equal?来查看两个对象是否是同一个id ,跟Python中的is差不多

    .eql?也是来判断值相等的,大多数情况下与==效果相等,但1.0=1情况另外

    上代码

    >> str1 = "foo"
    => "foo"
    >> str2 = str1
    => "foo"
    >> str3 = "f" + 'o' + 'o'
    => "foo"
    
    >> p str1.equal?(str2)
    true
    => true
    >> p str1.equal?(str3)
    false
    => false
    >> p str1.eql?(str3)
    true
    => true
    >> 
    
    >> a = 1
    => 1
    >> b = 1.0
    => 1.0
    >> a == b
    => true
    >> a.eql?(b)
    => false
    >> 
    
    >> hash = {0 => "oo"}
    => {0=>"oo"}
    >> hash[0]
    => "oo"
    >> hash[0.0]
    => nil
    >> 
    
  • 相关阅读:
    用户需求报告
    结队开发项目——七巧板NABC需求分析
    梦断代码读书笔记3
    课堂练习之环形二维数组
    结对开发之求最大子数组的溢出问题
    《代码之美》第二章读后感(一)
    软件工程项目冲刺阶段二:第五天
    软件工程项目冲刺阶段二:第四天(06-06)
    软件工程项目冲刺阶段二:第三天
    课程评价
  • 原文地址:https://www.cnblogs.com/sidianok/p/12977762.html
Copyright © 2020-2023  润新知