美文网首页
ruby study note

ruby study note

作者: M1983 | 来源:发表于2013-07-26 14:22 被阅读0次

    条件区间

    expr1..expr2
    expr1...expr2
    

    初始状态机为关闭,当expr1为真是状态机打开,直到expr2为真时状态机关闭,再到expr1为真时再打开。2个点时,当状态机打开后执行完当前语句会接着检查expr2,如果expr2为真会关闭状态机,3个点时则不会再接着检查expr2,会在接下来的语句中再检查expr2的值。

    例1:

    while line=gets
      puts line if line=~/start/..line=~/end/
    end
    

    当line包含start时开始打印,直到line中包含end时,打印该行后结束打印。使用2个点表示如果line中即包含start又包含end时开关开启后打印完该行接着关闭,之后的行不再打印,直到line中包含start再开始打印。如果是3个点,则开关打开并打印该行后不再检查是否有end,继续往下打印,直到line中包含end时打印该行并结束打印。

    例2:

    a = (11..20).each {|i| print i," " if (i%4 == 0)..(i%3 == 0)}
    =>12 16 17 18 20
    #初始状态要为假,i=11时不满条件1,所以不打印,当i=12时满足(i%4 == 0),这时打印12,再检查(i%3 == 0)也满足,这时状态机关闭,所以后面的值只要不满足(i%4 == 0)的都不打印,直到i=16时再次满足(i%4 == 0),状态机开启,打印16,检查i%3 == 0不满足,所以状态机一直是开启状态,17,18打印,当i=18时满足i%3 == 0所以状态机关闭,直到i=20时满足i%4 == 0,所以打印20.
    
    a = (11..20).each {|i| print i," " if (i%4 == 0)...(i%3 == 0)}
    =>12 13 14 15 16 17 18 20
    #当区间为3个点时,当状态机开启后不再检查条件2,所以当i=12时满足条件1,状态机开启,打印12,不再检查条件2,这时状态机一直是开启,所以后面的值一直打印,直到i=18满足条件2这时状态机关闭。<br>
    
    if ... then
    #...
    elsif #... else #... end
    unless ... then
    #...
    end
    
    case
    when ...
    #...
    when ...
    #...
    else
    #...
    end
    #处理异常
    begin/def method
    #code
    rescue Exception => e #rescue可以有多个,每个可以指定多个异常参数,异常被保存在$!中,不带参数的raise将重新引发$!异常
    #error handing code
    else
    #no exception code
    ensure
    #always executed code
    end

    相关文章

      网友评论

          本文标题:ruby study note

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