欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ruby的程序結(jié)構(gòu)介紹

 更新時間:2015年05月23日 11:19:41   投稿:junjie  
這篇文章主要介紹了ruby的程序結(jié)構(gòu)介紹,本文講解了源文件、模塊、控制結(jié)構(gòu)、方法定義、類及對象等內(nèi)容,需要的朋友可以參考下

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

 一、源文件

 1.1、文件包含
 

復(fù)制代碼 代碼如下:

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

1.2、源文件執(zhí)行順序


復(fù)制代碼 代碼如下:

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

1.3、源文件書寫規(guī)則

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

二、模塊

復(fù)制代碼 代碼如下:

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

三、控制結(jié)構(gòu)

ruby的控制結(jié)構(gòu)和其他語言一樣無非就是順序,分支及循環(huán),但寫法上相當(dāng)?shù)撵`活。

3.1、分支結(jié)構(gòu)之if

復(fù)制代碼 代碼如下:

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

3.2、分支結(jié)構(gòu)之case

復(fù)制代碼 代碼如下:

    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、循環(huán)結(jié)構(gòu)

復(fù)制代碼 代碼如下:

    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 

復(fù)制代碼 代碼如下:

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

3.4、控制結(jié)構(gòu)補充

復(fù)制代碼 代碼如下:

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

四、方法定義

ruby中的方法支持默認(rèn)參數(shù),可變參數(shù)但不支持關(guān)鍵字參數(shù),可以通過傳入散列表來模擬實現(xiàn),方法的最后一句的執(zhí)行結(jié)果就是其返回值。

4.1、一般方法

復(fù)制代碼 代碼如下:

    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根據(jù)方法名來確定方法的作用范圍,這樣做增加了程序的閱讀性。

復(fù)制代碼 代碼如下:

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

4.3、BLOCK

與方法關(guān)聯(lián)的BLOCK為方法提供了可擴(kuò)展性??梢园逊椒ㄖ械囊徊糠诌壿嫵橄蟪葿LOCK獨立出來,和子程序調(diào)用所不同的是,BLOCK是靈活的,也就是說我可以只完成方法的主干部分,有一些邏輯可以根據(jù)需要在調(diào)用方法時進(jìn)行擴(kuò)展。

復(fù)制代碼 代碼如下:

    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最后一條語句執(zhí)行結(jié)果就是給方法的返回值。 

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

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

        ◆&方法 得到方法的引用,調(diào)用時采用 方法引用.call的方式

五、類及對象

5.1、普通的類定義如下

復(fù)制代碼 代碼如下:

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

5.2、類中方法的訪問權(quán)限默認(rèn)為public,ruby有和c++類似的權(quán)限聲明方式。

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

    class Person 
        attr_reader :name 
        @@country="china" #靜態(tài)變量 
        def initialize(name) 
            @name=name 
        end 
        def Person.output #靜態(tài)方法 
            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、類的繼承

復(fù)制代碼 代碼如下:

    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調(diào)用父類同名方法 
            @grade=grade 
        end 
    end 
     
    s1=Student.new("justsong",10) 
    print s1.name,"\n",s1.grade 

5.6、嵌套類

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

相關(guān)文章

  • 在Ruby on Rails中使用AJAX的教程

    在Ruby on Rails中使用AJAX的教程

    這篇文章主要介紹了在Ruby on Rails中使用AJAX的教程,文章來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Ruby中的return、break、next詳解

    Ruby中的return、break、next詳解

    這篇文章主要介紹了Ruby中的return、break、next詳解,這三個關(guān)鍵字一般都用來作為語句中斷或返回功能,本文就詳細(xì)介紹了相關(guān)內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 借助RubyGnome2庫進(jìn)行GTK下的Ruby GUI編程的基本方法

    借助RubyGnome2庫進(jìn)行GTK下的Ruby GUI編程的基本方法

    這篇文章主要介紹了借助RubyGnome2庫進(jìn)行GTK下的Ruby GUI編程的基本方法,介紹了基本的UI和事件響應(yīng)的相關(guān)實現(xiàn),需要的朋友可以參考下
    2015-12-12
  • Ruby正則表達(dá)式詳解

    Ruby正則表達(dá)式詳解

    正則表達(dá)式是一種特殊序列的字符,它通過使用有專門語法的模式來匹配或查找字符串集合,這篇文章纖細(xì)介紹了Ruby大的正則表達(dá)式,文章有詳細(xì)的代碼示例,需要的朋友可以參考一下
    2023-04-04
  • 詳解Ruby中的代碼塊及其參數(shù)傳遞

    詳解Ruby中的代碼塊及其參數(shù)傳遞

    block代碼塊基本上是開始學(xué)習(xí)Ruby后的第一個坎,接下來就帶大家詳解Ruby中的代碼塊及其參數(shù)傳遞,需要的朋友可以參考下
    2016-05-05
  • Ruby配置rspec和RestClient來檢測服務(wù)器

    Ruby配置rspec和RestClient來檢測服務(wù)器

    這篇文章主要介紹了Ruby配置rspec和RestClient來檢測服務(wù)器的方法,包括JSON文件的相關(guān)配置,需要的朋友可以參考下
    2015-07-07
  • 用實際代碼演示Ruby的容易被誤解的6個特性

    用實際代碼演示Ruby的容易被誤解的6個特性

    這篇文章主要介紹了用實際代碼演示Ruby的容易被誤解的6個特性,采集自IBM官方網(wǎng)站的開發(fā)者文檔,需要的朋友可以參考下
    2015-04-04
  • 詳解Ruby中的塊的知識

    詳解Ruby中的塊的知識

    這篇文章主要介紹了詳解Ruby中的塊的知識,包括yield語句和begin/end塊等知識點,需要的朋友可以參考下
    2015-05-05
  • Java 版的 Ruby 解釋器 JRuby 1.7.14 發(fā)布

    Java 版的 Ruby 解釋器 JRuby 1.7.14 發(fā)布

    JRuby,一個采用純Java實現(xiàn)的Ruby解釋器,由JRuby團(tuán)隊開發(fā)。它是一個自由軟件,在CPL/GPL/LGPL三種許可協(xié)議下發(fā)布。
    2014-08-08
  • Ruby基礎(chǔ)知識之基本流程控制

    Ruby基礎(chǔ)知識之基本流程控制

    這篇文章主要介紹了Ruby基礎(chǔ)知識之基本流程控制,本文講解了條件判斷、循環(huán)語句、迭代器和枚舉三部分內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論