亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

ruby的程序結構介紹

2020-03-29 12:01:44
字體:
來源:轉載
供稿:網友

概括、ruby程序由一個或多個ruby源文件組成,源文件由模塊組成,模塊內部有控制結構、類對象、方法、及表達式等元素,下面就按照這個思路來總結ruby的程序組織結構。

 一、源文件

 1.1、文件包含
 

復制代碼 代碼如下:

 #file1.rb 
inc_path=$0.sub(////w+/.rb/,"") #獲取當前路徑的目錄 
$:.insert(-1,inc_path) #將當前路徑加入到load路徑數組 
 
require "file2.rb" 
require "file2.rb" #require包含文件只會被導入一次 
 
load "file3.rb" 
load "file3.rb" #每次load都會無條件再次導入文件 
 
 
#file2.rb 
print "file2.rb is included/n"  
 
 
#file3.rb 
print "file3 is included/n"
 

 

1.2、源文件執行順序

 

復制代碼 代碼如下:

#coding=utf-8   
=begin 
這里是 
多行注釋 
=end 
 
END{print "end1/n"}   
END{print "end2/n"}   
#END塊的執行順序與出現順序相反   
 
print "text/n"   
    
BEGIN{print "begin1/n"}   
BEGIN{print "begin2/n"}   
#BEGIN塊的執行順序與出現順序相同   
#BEGIN-TEXT-END 
 
#__END__開頭的行后面的內容被忽略 
__END__ 
print "no_text/n"

 

1.3、源文件書寫規則

◆大小寫敏感
◆換行符后只能有空白符,并且都會被忽略
◆類和模塊及常量名要以大寫字母開頭,變量以小寫字母或者unicode開頭

二、模塊

復制代碼 代碼如下:

    #module1.rb 
    inc_path=$0.sub(////w+/.rb/,"") #獲取當前路徑的目錄 
    $:.insert(-1,inc_path) #將當前路徑加入到load路徑數組 
     
    require "module2.rb" 
     
    print Mymod::VAR1,"/n" 
    Mymod.out 
     
    include Mymod #把Mymod導入到當前名字空間 
    print VAR1 
     
     
    #module2.rb 
    print "module2.rb is included/n" 
     
    module Mymod 
        var1=99  #模塊內的變量 
        VAR1=100 #模塊內的常量 
         
        print "Mymode is included,var1 is ",var1,"/n" 
         
        def Mymod.out #模塊內的方法必須加上模塊名 
            print "Mymod.out run/n" 
        end 
    end  

 

三、控制結構

ruby的控制結構和其他語言一樣無非就是順序,分支及循環,但寫法上相當的靈活。

3.1、分支結構之if

復制代碼 代碼如下:

#if.rb 
num=100   
if (num>200) #可以用unless進行條件取反   
  print "num>200/n"   
elsif num>100   
  print "num>100/n"   
else   
  print "num<=100/n" #此句執行   
end   
     
print "num<=100/n" if num<=100 #if語句可后置,并且if語句本身也是表達式也具有值 
if num<=100 then print "num<100/n" #then可用:替換

 

3.2、分支結構之case

 

復制代碼 代碼如下:

    num=100 
     
    str1=/ 
    case 
        when num>200 then "num>200" 
        when num>100 then "num>100" 
        else "num<=100" #else不使用then 
    end 
     
    print str1,"/n" 
     
     
    case num 
        when 201 : print "num>200"#:和then起到相同的作用 
        print 101 when num>100 
        else print "num<=100" 
    end 

 

3.3、循環結構

 

復制代碼 代碼如下:

    num=1 
     
    while num<5 #反義詞until 
        print num 
        num+=1 
    end 
     
    print "/n" 
     
    arr1=[1,2,3,4,5] 
     
    for i in arr1 
        print i 
    end 

 

 

復制代碼 代碼如下:

    num=1 
    loop{ #注意{必須和loop在同一行 
        num+=1 
        next if num==3 #不輸出3 
        redo if num==4 #把循環體內此行的前面的語句再執行一遍 
        break if num>5 #大于5則退出循環 
        print num 
    } 
    #輸出25 
    #while,until,for也可用next,redo,break 

 

3.4、控制結構補充

 

復制代碼 代碼如下:

    print "0 is true!" #0也是true 
    print "empty string is true!" #""也是true 
    #在ruby中只有nil被判斷是false 

 

四、方法定義

ruby中的方法支持默認參數,可變參數但不支持關鍵字參數,可以通過傳入散列表來模擬實現,方法的最后一句的執行結果就是其返回值。

4.1、一般方法

復制代碼 代碼如下:

    def non_para 
        print "this is non_para method/n" 
    end 
     
    def many_para(para1,default_para2=2,*dynamic_para3) 
        print "first para is ",para1,"/n" 
        print "default_para is ",default_para2,"/n" 
        for i in dynamic_para3 
            print i,"," 
        end 
    end 
     
    non_para() 
    many_para(1,3,5,7,9) 

 

4.2、方法的作用范圍

ruby根據方法名來確定方法的作用范圍,這樣做增加了程序的閱讀性。

 

復制代碼 代碼如下:

    #coding=utf-8 
     
    str1="abcdefg" 
     
    def str1.len #對象的方法 
        puts self.length 
    end 
     
    str1.len 
     
    class Person 
        def Person.info #類的方法即靜態方法 
            puts "this is a perosn" 
        end 
    end 
     
    Person.info 

 

4.3、BLOCK

與方法關聯的BLOCK為方法提供了可擴展性。可以把方法中的一部分邏輯抽象成BLOCK獨立出來,和子程序調用所不同的是,BLOCK是靈活的,也就是說我可以只完成方法的主干部分,有一些邏輯可以根據需要在調用方法時進行擴展。

復制代碼 代碼如下:

    def func para1 
        localvalue="local value" 
        yield(para1) 
    end 
     
    func(100){|para1|print "value of para1 is ",para1,"/n"} 
     
    func(100) do |para1| 
    print "double value of para1 is",para1*2,"/n" 
    #print local_value 局部變量已不能被繼承 
    end 
    #yield最后一條語句執行結果就是給方法的返回值。 

 

4.5、方法補充
        ◆可以undef 方法名取消方法的定義

        ◆alias 方法名 方法別名 可以為方法定義不同的名字

        ◆&方法 得到方法的引用,調用時采用 方法引用.call的方式

五、類及對象

5.1、普通的類定義如下

復制代碼 代碼如下:

    class Person 
        def initialize(name,age)#屬性在initialize中定義 
            @name=name 
            @age=age 
        end 
        def name#屬性不能直接被訪問,必須通過方法接口進行訪問 
            @name 
        end 
        def age 
            @age 
        end 
    end 
     
    p1=Person.new("justsong",28)#會用相同的參數調用initialize 
    print p1.name,"/n",p1.age 

 

5.2、類中方法的訪問權限默認為public,ruby有和c++類似的權限聲明方式。

 

復制代碼 代碼如下:

    class Person 
        def initialize(name,age)#屬性在initialize中定義 
            @name=name 
            @age=age 
        end 
        def name#屬性不能直接被訪問,必須通過方法接口進行訪問 
            @name 
        end 
    private#protected,public 
        def age 
            @age 
        end 
    end 
     
    p1=Person.new("justsong",28)#會用相同的參數調用initialize 
    print p1.name,"/n" 
    #print p1.age,private調用將被禁止 

 

5.3、由于屬性必須通過方法接口進行訪問,所以在書寫程序時有些繁瑣,可以采用一下的方法進行簡寫。

復制代碼 代碼如下:

    class Person 
        attr_reader :name #具有只讀權限 
        attr_writer :age #具有只寫權限 
        attr_accessor :country #具有讀寫權限 
        def initialize(name,age,country) 
            @name=name 
            @age=age 
            @country=country 
        end 
    end 
     
    #其實是ruby自動生成了一些方法 
     
    p1=Person.new("justsong",28,"china")#會用相同的參數調用initialize 
     
    print p1.name,"/n" 
    print p1.country,"/n" 
    #print p1.age,會提示未定義相應方法 

 

5.4、ruby的類也具有類變量(靜態變量)及類方法(靜態方法)

 

復制代碼 代碼如下:

    class Person 
        attr_reader :name 
        @@country="china" #靜態變量 
        def initialize(name) 
            @name=name 
        end 
        def Person.output #靜態方法 
            print "country is ",@@country,"/n" 
        end      
    end 
     
    Person.output 
     
    p1=Person.new("zhangsan") 
    p2=Person.new("lisi") 
    print p1.name,"/n",p2.name 

 

5.5、類的繼承

復制代碼 代碼如下:

    class Person 
        attr_reader :name 
        def initialize(name) 
            @name=name 
        end 
    end 
     
    class Student < Person 
        attr_reader :grade 
        def initialize(name,grade) 
            super(name)#利用super調用父類同名方法 
            @grade=grade 
        end 
    end 
     
    s1=Student.new("justsong",10) 
    print s1.name,"/n",s1.grade 

 

5.6、嵌套類

直接在類中定義類,或是在類定義時用::指定的類的所屬類。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一夜七次郎国产精品亚洲| 欧美午夜www高清视频| 中文字幕欧美精品日韩中文字幕| 国产亚洲精品美女| 日韩美女激情视频| 国产精品女主播| 欧美日韩亚洲一区二区三区| 国产精品成熟老女人| 国产午夜精品免费一区二区三区| 欧美日韩亚洲激情| 久久久久久亚洲精品不卡| 97视频网站入口| 欧美最猛性xxxxx亚洲精品| 在线观看国产精品日韩av| 国内精品模特av私拍在线观看| 欧美专区福利在线| 国产亚洲aⅴaaaaaa毛片| 国产精品久久久久免费a∨| 亚洲欧洲国产伦综合| 国产一区二区丝袜| 最新国产成人av网站网址麻豆| 日韩在线www| 高跟丝袜欧美一区| 亚洲黄色有码视频| 日本精品久久电影| 777777777亚洲妇女| 色999日韩欧美国产| 欧美日韩加勒比精品一区| 中文字幕亚洲一区在线观看| 日韩小视频网址| 爽爽爽爽爽爽爽成人免费观看| 欧美一级免费视频| 色爱av美腿丝袜综合粉嫩av| 成人精品在线观看| 亚洲欧美国产精品久久久久久久| 91高清视频免费观看| 色樱桃影院亚洲精品影院| 成人午夜在线影院| 亚洲黄色片网站| 国产精品一区二区三区久久久| 久久精品视频导航| 日韩精品欧美国产精品忘忧草| 日韩av成人在线观看| 国产一区二区三区久久精品| 亚洲18私人小影院| 欧美日韩午夜剧场| 91亚洲国产成人精品性色| 欧美国产视频日韩| 国产精品视频免费在线| 亚洲国产精品福利| 57pao成人永久免费视频| 国产91精品视频在线观看| 国产视频在线一区二区| 两个人的视频www国产精品| 操91在线视频| 国产成人精品视频| 久久久久国产精品免费| 国产激情视频一区| 色婷婷久久一区二区| 国产美女高潮久久白浆| 午夜精品久久久久久久99黑人| 亚洲日本欧美日韩高观看| 欧美电影免费观看网站| 91视频免费网站| 日韩av在线网| 日本a级片电影一区二区| 欧美久久精品午夜青青大伊人| 欧美巨猛xxxx猛交黑人97人| 日韩精品视频免费专区在线播放| 国产精品视频大全| 国产精品扒开腿做爽爽爽男男| 成人久久久久久| 久久国产精品视频| 91日本在线视频| 日韩免费av一区二区| 欧美在线免费视频| 777精品视频| 国产精品网址在线| 欧美日韩国产成人| 午夜精品美女自拍福到在线| 亚洲精品国偷自产在线99热| 精品国产一区av| 成人激情电影一区二区| 中文字幕久精品免费视频| 中文字幕日韩免费视频| 日韩精品亚洲元码| 81精品国产乱码久久久久久| 91精品国产一区| 亚洲免费视频观看| 亚洲免费视频网站| 亚洲大胆美女视频| 一区二区欧美日韩视频| 亚洲在线观看视频网站| 国产精品video| 国产精品亚洲视频在线观看| 精品偷拍一区二区三区在线看| 国产美女精品免费电影| 亚洲人成网站在线播| 日韩精品在线播放| 精品久久久久久久久久| 亚洲电影免费观看高清完整版在线观看| 亚洲在线观看视频网站| 高清日韩电视剧大全免费播放在线观看| 亚洲欧美资源在线| 亚洲性生活视频在线观看| 日韩精品视频在线免费观看| 国产成人精品免费久久久久| 国产一区二区三区在线观看视频| 亚洲欧美日韩成人| 欧美高清自拍一区| 国产日韩欧美日韩大片| 日韩免费观看高清| 国产精品视频xxxx| 亚洲第一福利在线观看| 久久色在线播放| 97热精品视频官网| 免费不卡在线观看av| 亚洲人在线观看| 2019亚洲男人天堂| 一区二区三区久久精品| 国产精品男人爽免费视频1| 亚洲a成v人在线观看| 欧美在线观看视频| 在线丨暗呦小u女国产精品| 奇米一区二区三区四区久久| 国产午夜精品视频| 欧美日韩国产色| 国产97在线视频| 久久亚洲成人精品| 国产精品久久久久免费a∨| 国产精品入口日韩视频大尺度| 98精品国产高清在线xxxx天堂| 日韩高清中文字幕| 久久久亚洲欧洲日产国码aⅴ| www.欧美精品一二三区| 91麻豆国产语对白在线观看| 亚洲天堂一区二区三区| 亚洲一区二区日本| 久久91亚洲精品中文字幕奶水| 亚洲另类激情图| 狠狠躁天天躁日日躁欧美| 国产婷婷色综合av蜜臀av| 欧美亚洲国产视频小说| 热久久视久久精品18亚洲精品| 91网站在线免费观看| 国模精品视频一区二区三区| 日本一欧美一欧美一亚洲视频| 欧美午夜影院在线视频| 欧美精品videossex88| 欧美高清视频在线播放| 亚洲国产精品久久91精品| 国产精品v片在线观看不卡| 日本在线观看天堂男亚洲| 日本欧美中文字幕| 日本精品一区二区三区在线| 国产丝袜一区二区三区| 一区二区三欧美| 中日韩美女免费视频网站在线观看| 成人精品视频久久久久| 国产成人aa精品一区在线播放| 8090成年在线看片午夜| 日韩高清av一区二区三区| 亚洲午夜未满十八勿入免费观看全集| 久久综合色影院|