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

首頁 > 編程 > Ruby > 正文

ruby的程序結構介紹

2020-02-24 15:37:38
字體:
來源:轉載
供稿:網友

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、嵌套類

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

以上就是關于ruby的程序結構介紹,如果你還想了解更多技術方面的知識,你可以來關注武林技術頻道網為大家介紹的知識。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧洲成视频免费观看| 成人有码视频在线播放| 欧美性猛交xxxx偷拍洗澡| 中日韩午夜理伦电影免费| 国产成人精品日本亚洲专区61| 美女啪啪无遮挡免费久久网站| 欧美大尺度激情区在线播放| 中文字幕在线精品| 亚洲国产女人aaa毛片在线| 黑人精品xxx一区一二区| 久久亚洲国产成人| 欧美第一页在线| 欧美尤物巨大精品爽| 久久91亚洲精品中文字幕奶水| 黄色成人在线免费| 国产成人精品最新| 久久久av网站| 久久久av一区| 日韩中文理论片| yellow中文字幕久久| 日韩av第一页| 日韩高清电影好看的电视剧电影| 国产精品久久久久久久久久东京| 日韩中文字幕免费视频| 欧美激情区在线播放| 久久久久久国产精品三级玉女聊斋| 亚洲国产精品va在线看黑人动漫| 国产成人亚洲综合青青| 欧美理论在线观看| 色婷婷综合久久久久| 亚洲精品久久久久国产| 欧日韩不卡在线视频| 亚洲欧美在线一区二区| 97在线免费观看| 51精品国产黑色丝袜高跟鞋| 国产精品成人免费电影| 欧美成人亚洲成人| 国产精品久久久久免费a∨| 欧美亚洲成人xxx| 欧美日韩国产限制| 欧美在线国产精品| 最近2019中文字幕大全第二页| 国语自产精品视频在免费| 国产精品视频地址| 亚洲老头老太hd| 日韩中文在线不卡| 疯狂蹂躏欧美一区二区精品| 在线播放日韩精品| 亚洲精品中文字| 91麻豆国产语对白在线观看| 久久久久久久久久久久av| 2021国产精品视频| 伊人青青综合网站| 国产成人高清激情视频在线观看| 色综合天天狠天天透天天伊人| 精品中文字幕久久久久久| 一区二区三区视频观看| 久久久久久91香蕉国产| 国产偷亚洲偷欧美偷精品| 亚洲在线免费看| 色综合亚洲精品激情狠狠| 亚洲视频专区在线| 日韩电影在线观看永久视频免费网站| 成人中文字幕在线观看| 成人亚洲综合色就1024| 成人精品一区二区三区电影黑人| 日韩av在线看| 精品久久久国产精品999| 欧美日本高清视频| 青青草成人在线| 亚洲在线一区二区| 亚洲综合在线中文字幕| 最好看的2019年中文视频| 久久精品国产久精国产一老狼| 福利视频导航一区| 国产精品久久久久av| 日韩av一区二区在线观看| 日韩大陆欧美高清视频区| 久久天堂av综合合色| 精品久久久久久久久久ntr影视| 成人福利视频网| 国产精品高潮呻吟久久av无限| 欧美中文在线字幕| 欧美电影院免费观看| 日韩亚洲综合在线| 国产极品jizzhd欧美| 国自在线精品视频| 欧美激情一区二区三级高清视频| 97在线看免费观看视频在线观看| 日本韩国在线不卡| 国产精品美女999| 久久久久久亚洲精品中文字幕| 热久久这里只有| 亚洲日本欧美日韩高观看| 欧美日韩性生活视频| 国产精品高清在线观看| 在线观看欧美视频| 国产欧美婷婷中文| 欧美激情视频三区| 亚洲第一国产精品| 国外成人在线播放| 中文字幕日韩在线视频| 国产亚洲a∨片在线观看| 一区二区三区www| 欧美制服第一页| 精品视频偷偷看在线观看| 久久久精品网站| 国产成人在线亚洲欧美| 欧美成人小视频| 久久激情视频免费观看| 精品亚洲一区二区| 久久琪琪电影院| 热门国产精品亚洲第一区在线| 亚洲人成网7777777国产| 2023亚洲男人天堂| 欧美夫妻性生活xx| 亚洲欧洲第一视频| 国产精品久久久久国产a级| 日韩av在线天堂网| 成人97在线观看视频| 色偷偷噜噜噜亚洲男人| 日韩视频―中文字幕| 日韩av免费在线播放| 国产精品h在线观看| 久久亚洲精品一区二区| 日韩av大片在线| 九九九久久国产免费| 欧美特级www| 97精品国产97久久久久久春色| 亚洲精品国产成人| 欧美成人在线免费视频| 91av在线视频观看| 日韩精品视频在线| 日本精品va在线观看| 国产91色在线| 久久精品视频va| 日韩欧美在线观看| 国产成人精品免高潮在线观看| 亚洲欧美制服另类日韩| 92国产精品久久久久首页| 国产精品啪视频| 久久免费成人精品视频| 91精品国产高清自在线| 欧美大奶子在线| 久久亚洲精品国产亚洲老地址| 中文字幕欧美国内| 黄色一区二区在线观看| 精品欧美一区二区三区| 国产男女猛烈无遮挡91| 国产精品丝袜高跟| 日韩经典中文字幕| 俺去亚洲欧洲欧美日韩| 国产91精品青草社区| 久久成人人人人精品欧| 亚洲国产成人精品久久久国产成人一区| 中文字幕免费精品一区| 69av成年福利视频| 欧美日韩激情美女| 国产91精品久久久久久久| 福利二区91精品bt7086| 日韩中文字幕欧美| 一个色综合导航| 国产成人久久久| 国产精品视频专区|