




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
四、Julia語言進(jìn)階4.2類型系統(tǒng)定義:在程序運(yùn)行中,將編程語言中數(shù)據(jù)的值和表達(dá)式按照一定的規(guī)則歸為不同的類型,這種規(guī)則被稱為類型系統(tǒng)。靜態(tài)類型系統(tǒng):值和表達(dá)式的類型先聲明后使用,程序未運(yùn)行就可以確定計算值和表達(dá)式的類型,減少程序運(yùn)行時間,提升計算效率。動態(tài)類型系統(tǒng):值和表達(dá)式的類型不用聲明,編程更簡單,提升開發(fā)程序的效率。Julia是一種動態(tài)類型語言,但是它可以像靜態(tài)類型語言一樣聲明值和表達(dá)式的類型,同時具備便于程序開發(fā)和代碼計算高效的優(yōu)點(diǎn)。四、Julia語言進(jìn)階4.2.1類型聲明斷言語法:變量和表達(dá)式::類型名稱,例如類型聲明,或稱類型注釋,用運(yùn)算符“::”斷言和聲明變量和表達(dá)式的類型。julia>(0.5*0.6)::Int64ERROR:TypeError:intypeassert,expectedInt64,gotavalueoftypeFloat64Stacktrace:[1]top-levelscope@REPL[4]:1julia>(0.5*0.6)::Float640.3斷言非真,報錯。斷言為真,輸出表達(dá)式的值。四、Julia語言進(jìn)階4.2.1類型聲明聲明語法:變量和表達(dá)式名稱::類型名稱,例如聲明浮點(diǎn)型變量ajulia>functionForth_2_1_function()a::Float64=1.0;
returna
endForth_2_1_function(genericfunctionwith1method)julia>b=Forth_2_1_function()1.0julia>typeof(b)Float64julia>運(yùn)算符::不支持聲明全局變量,僅可聲明局部變量。Typeof函數(shù)輸出變量的類型。四、Julia語言進(jìn)階4.2.1類型聲明聲明函數(shù)的類型:函數(shù)名稱()::類型名稱,例如聲明整型函數(shù)julia>functionForth_2_1_function()::Int64a::Float64=1.0;
returna
endForth_2_1_function(genericfunctionwith1method)julia>b=Forth_2_1_function()1整型函數(shù)的輸出值為整型聲明函數(shù)的類型為整型四、Julia語言進(jìn)階4.2.1類型聲明已聲明類型的函數(shù),返回值類型與輸入值的類型無關(guān)。julia>functionForth_2_1_function(a::Float64)::Int64
returna
endForth_2_1_function(genericfunctionwith1method)julia>b=Forth_2_1_function(1.0)1整型函數(shù)浮點(diǎn)型輸入值整型返回值。julia>functionForth_2_1_function()a::Float64=1.0;
returna
endForth_2_1_function(genericfunctionwith1method)julia>locala::Int64=11julia>b=Forth_2_1_function()1.0四、Julia語言進(jìn)階4.2.1類型聲明使用local關(guān)鍵詞修改函數(shù)的變量類型,但不能改變函數(shù)返回值的類型。浮點(diǎn)型返回值浮點(diǎn)型變量修改為整型變量四、Julia語言進(jìn)階4.2.1類型聲明Julia類型系統(tǒng)包括抽象類型、原始類型、復(fù)合類型和參數(shù)類型。參數(shù)類型參數(shù)抽象類型參數(shù)原始類型參數(shù)復(fù)合類型抽象類型原始類型復(fù)合類型參數(shù)化四、Julia語言進(jìn)階4.2.2抽象類型聲明c為一個抽象類型,d是c的一個子類型。abstracttypenameendabstracttypechlidname<:parentnameendabstracttypecendabstracttyped<:c
end抽象類型不能被實例化,只能聲明是父類型的一個子類型。通常用符號<:和關(guān)鍵詞abstracttype聲明抽象類型,聲明語句形式如下:斷言是否為子類型julia>Number<:Realfalsejulia>Real<:Numbertrue四、Julia語言進(jìn)階4.2.2抽象類型每個抽象類型是類型圖上的某個節(jié)點(diǎn)。任何類型都是Any的子類型,任何對象都是Any的實例。abstracttypeNumberendabstracttypeReal<:Number
endabstracttypeAbstractFloat<:Real
endabstracttypeInteger<:Real
endabstracttypeSigned<:Integer
endabstracttypeUnsigned<:Integer
endAnyNumberRealAbstractFloatIntegerSignedUnsigned四、Julia語言進(jìn)階4.2.2抽象類型抽象類型通常被應(yīng)用于函數(shù)輸入?yún)?shù)的聲明function
Forth_2_2_2(a,b)
c=a-b;
returncendfunction
Forth_2_2_2(a::Any,b::Any)
c=a-b;
returncend未聲明函數(shù)變量的類型時,默認(rèn)變量的類型為Any。Forth_2_2_2(a,b)與Forth_2_2_2(a::Any,b::Any)等價。四、Julia語言進(jìn)階4.2.2抽象類型位于類型圖最低點(diǎn)的抽象類型,稱為Union{}類型,又稱類型共用體。關(guān)鍵詞Union定義類型共用體。julia>myunion=Union{Int,Float64,AbstractString}#定義類型集合myunionUnion{Float64,Int64,AbstractString}julia>1::myunion#斷言1julia>
1.0::myunion#斷言1.0julia>"Syslab"::myunion"Syslab"注意:所有類型都是Union{}類型的父類型,它不能被實例化四、Julia語言進(jìn)階4.2.3原始類型原始類型是具體類型,它的數(shù)據(jù)是由位組成。用關(guān)鍵詞primitivetype聲明原始類型,聲明語法如下:primitivetypenamebitsendprimitivetypechildname<:parentname
bits
end子類型名稱父類型名稱聲明類型占用的內(nèi)存空間四、Julia語言進(jìn)階4.2.3原始類型常見的原始類型有整數(shù)類型、浮點(diǎn)數(shù)類型、Bool類型和Char類型。Julia已經(jīng)給用戶定義了這些標(biāo)準(zhǔn)原始類型。primitivetypeFloat16<:AbstractFloat
16
endprimitivetypeFloat32<:AbstractFloat
32
endprimitivetypeFloat64<:AbstractFloat
64
endprimitivetypeBool<:Integer
8
endprimitivetypeChar<:AbstractChar
32
endprimitivetypeInt8<:Signed
8
endprimitivetypeUInt8<:Unsigned
8
endprimitivetypeInt16<:Signed
16
endprimitivetypeUInt16<:Unsigned
16
endprimitivetypeInt32<:Signed
32
endprimitivetypeUInt32<:Unsigned
32
endprimitivetypeInt64<:Signed
64
endprimitivetypeUInt64<:Unsigned
64
endprimitivetypeInt128<:Signed
128
endprimitivetypeUInt128<:Unsigned
128
end四、Julia語言進(jìn)階4.2.3原始類型julia>functionForth_2_2_4(a::Integer)::Integer
returna
endForth_2_2_4(genericfunctionwith1method)julia>c=Forth_2_2_4(5)5julia>typeof(c)Int64函數(shù)的輸入變量為原始類型時,函數(shù)可對抽象類型數(shù)據(jù)重新編譯。julia>isprimitivetype(Int)truejulia>isprimitivetype(Real)false內(nèi)置函數(shù)isprimitivetype()判斷類型是否為原始類型四、Julia語言進(jìn)階4.2.4復(fù)合類型復(fù)合類型是用戶唯一可以定義的類型,它是命名字段的集合。用戶可定義包含兩種及其以上的新類型,用關(guān)鍵詞struct定義不可變復(fù)合類型。julia>structmycomps1s2::Ints3::Float64
endjulia>newcomp=mycomp("Syslab",100,100.0)mycomp("Syslab",100,100.0)julia>
typeof(newcomp)mycomp定義名為mycomp的復(fù)合類型,包含Any/類型變量s1,整型變量s2和浮點(diǎn)型變量s3。輸入mycomp的對應(yīng)字段的變量值。四、Julia語言進(jìn)階4.2.4復(fù)合類型在Syslab中,與復(fù)合類型相關(guān)的內(nèi)置函數(shù)。julia>
fieldnames(mycomp)#導(dǎo)出字段名稱(:s1,:s2,:s3)julia>fieldcount(mycomp)#確定復(fù)合類型中所有聲明的類型的數(shù)量3julia>
fieldtypes(mycomp)#確定復(fù)合類型中所有聲明的類型(Any,Int64,Float64)julia>fieldtype(mycomp,:s2)#確定復(fù)合類型中指定字段聲明的類型Int64julia>fieldtype(mycomp,3)#確定復(fù)合類型中第3個字段聲明的類型Float64四、Julia語言進(jìn)階4.2.4復(fù)合類型用field語法訪問復(fù)合類型指定字段的值julia>newcomp.s1"Syslab"julia>newcomp.s2100julia>newcomp.s3100.0julia>mycomp.s2=3ERROR:setfield!fieldsofTypesshouldnotbechanged不可變復(fù)合類型不支持修改字段的值。訪問newcomp的s1和s2和s3值。四、Julia語言進(jìn)階4.2.4復(fù)合類型若不可變復(fù)合類型中不包含任何字段,稱為單例類型。用sturct定義單例類型julia>
structsingletype
endjulia>Base.issingletontype(singletype)truejulia>a=singletype()singletype()julia>b=singletype()singletype()julia>aisasingletypetruejulia>
isa(b,singletype)truejulia>a===btrue用Base.issingletontype判斷是否為單例類型判斷a是否為singletype類型判斷a和b的類型和值是否都一致四、Julia語言進(jìn)階4.2.4復(fù)合類型關(guān)鍵詞mutablestruct聲明的可變復(fù)合類型。julia>
mutablestructmychangedcomps1s2::Ints3::Float64
end
julia>myCC=mychangedcomp("MWORKS",2023,1.0)mychangedcomp("MWORKS",2023,1.0)julia>myCC.s1="Syslab""Syslab"julia>myCC.s3=2.02.0定義名為mychangedcomp的可變復(fù)合類型修改s1和s2的值julia>CC1=mychangedcomp("MWORKS",2023,1.0)mychangedcomp("MWORKS",2023,1.0)julia>CC2=mychangedcomp("MWORKS",2023,2.0)mychangedcomp("MWORKS",2023,2.0)julia>CC1.s3=2.02.0julia>CC1===CC2false四、Julia語言進(jìn)階4.2.4復(fù)合類型可變復(fù)合類型的字段不可區(qū)分時,字段值修改后相等也可區(qū)分。CC1和CC2的均由mychangecomp定義,字段均包含s1、s2和s3。字段類型相等,即不可區(qū)分。修改s3的值四、Julia語言進(jìn)階4.2.5參數(shù)類型T表示Para_comp的類型,它可以是任何類型。類型可以被參數(shù)化,每一個參數(shù)值的可能組合引入一個新類型,包含參數(shù)復(fù)合類型、參數(shù)抽象類型和參數(shù)原始類型。julia>structPara_comp{T}x::Ty::T
endjulia>Para_comp{Int64}Para_comp{Int64}julia>Para_comp{Float64}Para_comp{Float64}參數(shù)復(fù)合類型聲明語法:Para_comp{T}包含了無數(shù)個類型。當(dāng)它被調(diào)用時才會確定T的具體類型。julia>Para_comp{Int64}<:Para_comptruejulia>Int64<:Para_compfalsejulia>Para_comp{Int64}<:Para_comp{Float64}falsejulia>Para_comp{Float64}<:Para_comp{Int64}false四、Julia語言進(jìn)階4.2.5參數(shù)類型參數(shù)復(fù)合類型的具體類型是它的一個子類型參數(shù)復(fù)合類型、它的具體類型和花括號中類型的關(guān)系?;ɡㄌ栔械念愋筒皇菂?shù)復(fù)合類型的子類型參數(shù)復(fù)合類型的具體類型之間不存在父類型和子類型關(guān)系。julia>Int64<:Realtruejulia>Para_comp{Int64}<:Para_comp{Real}false花括號中的類型存在子類型關(guān)系,具體類型之間也不存在父類型和子類型關(guān)系。julia>
abstracttypePara_abst{T}endjulia>Para_abst{Float64}<:Para_absttruejulia>Para_abst{1.7}<:Para_absttrue四、Julia語言進(jìn)階4.2.5參數(shù)類型參數(shù)抽象類型的具體類型是它的一個子類型。參數(shù)抽象類型聲明語法:abstracttypename{T}endjulia>Para_abst{Float64}<:Para_abst{Real}falsejulia>Para_abst{Real}<:Para_abst{Float64}false參數(shù)抽象類型的具體類型之間不存在父類型和子類型關(guān)系。四、Julia語言進(jìn)階4.2.5參數(shù)類型協(xié)變類型Para_abst{<:Real}和逆變類型Para_abst{>:Int}表示類型的集合,可以作為參數(shù)抽象類型實例的父類型。julia>Para_abst{Int}<:Para_abst{<:Real}truejulia>Para_abst{Real}<:Para_abst{>:Int}true四、Julia語言進(jìn)階4.2.5參數(shù)類型參數(shù)復(fù)合類型可以聲明為參數(shù)抽象類型的子類型。julia>
structPara_comp{T}<:Para_abst{T}x::Ty::T
endjulia>Para_comp{Int}<:Para_abst{Int}truejulia>Para_comp{Int}<:Para_abst{<:Real}truejulia>Para_comp{Int}<:Para_abst{Real}false參數(shù)抽象類型的具體類型與參數(shù)復(fù)合類型的具體類型不存在父類型和子類型關(guān)系。julia>abstracttypePara_abst{T<:Real}endjulia>Para_abst{Int}Para_abst{Int64}julia>Para_abst{AbstractString}ERROR:TypeError:inPara_abst,inT,expectedT<:Real,gotType{AbstractString}julia>
structPara_comp{T<:Real}<:Para_abst{T}x::Ty::T
endjulia>Para_comp{Int}Para_comp{Int64}julia>Para_comp{AbstractString}ERROR:TypeError:inPara_comp,inT,expectedT<:Real,gotType{AbstractString}四、Julia語言進(jìn)階4.2.5參數(shù)類型聲明為參數(shù)抽象類型時可約束類型的范圍。約束T的為Real的子類型四、Julia語言進(jìn)階4.2.5參數(shù)類型參數(shù)原始類型的聲明語法:primitivetypeName{T}64
endjulia>primitivetypePara_prim{T}64endjulia>Para_prim{Int}<:Para_primtruejulia>isa(Int,Type{Int})truejulia>isa(Int,Type{Real})falsejulia>isa(Int,Type)truejulia>isa(1,Type)falseType{T}是一個抽象的參數(shù)類型,它的實例是唯一的;如果沒有參數(shù)T,那么Tpye是抽象類型,則任何類型都是它的具體了。四、Julia語言進(jìn)階4.2.5參數(shù)類型未實例化的參數(shù)類型,稱為UnionAll類型,用字段where約束類型范圍。julia>
structPara_comp{T}x::Ty::T
endjulia>
functionmyunionall1(a::Para_comp{T}whereT<:Real)#限定使用Real的子類型
a
endmyunionall1(genericfunctionwith1method)julia>
functionmyunionall2(b::Para_comp{T}whereInt64<:T<:Real) #限定用Int64與Real的之間的類型b
endmyunionall2(genericfunctionwith1method)四、Julia語言進(jìn)階4.2.5參數(shù)類型有多個字段可用多個where限定類型范圍,用空格隔開。例如,限定T1和T2的類型范圍:julia>
structPara_comp_2{T1,T2}x::T1y::T2
endjulia>
functionmyunionall3(c::Para_comp_2{T1,T2}where{T1<:Real}where{T2<:Int64})c
endmyunionall3(genericfunctionwith1method)julia>四、Julia語言進(jìn)階4.2.6類型運(yùn)算類型運(yùn)算包括檢測對象的類型,判斷類型的子類型和父類型,判斷類型的類型。julia>
isa(1.0,Float64)#檢測對象是否為浮點(diǎn)型truejulia>typeof(2)#檢測對象的類型Int64julia>
typeof(Int64)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 12《富起來到強(qiáng)起來》第一課時 教學(xué)設(shè)計-2023-2024學(xué)年道德與法治五年級下冊統(tǒng)編版
- 12家庭的記憶 第一課時 (教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版道德與法治三年級上冊
- 三農(nóng)養(yǎng)殖業(yè)技術(shù)培訓(xùn)手冊
- 三農(nóng)行業(yè)調(diào)研報告與操作指南
- 8 美麗文字民族瑰寶第二課時(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版道德與法治五年級上冊
- 2023三年級數(shù)學(xué)上冊 五 風(fēng)箏廠見聞-兩、三位數(shù)除以一位數(shù)(一)信息窗2 兩位數(shù)除以一位數(shù)的筆算方法及除法的驗算第3課時教學(xué)實錄 青島版六三制
- 某鐵路工程施工組織設(shè)計方案
- 內(nèi)六線哆嗦溝隧道加固工程施工組織
- 2024年五年級數(shù)學(xué)上冊 五 生活中的多邊形-多邊形的面積相關(guān)鏈接:公頃、平方千米教學(xué)實錄 青島版六三制
- 2023一年級語文上冊 第三單元 13 ɑnɡ enɡ inɡ onɡ配套教學(xué)實錄 新人教版
- 小學(xué)體育與健康教育科學(xué)二年級下冊第一章體育基本活動能力立定跳遠(yuǎn)教案 省一等獎
- 工程分包管理計劃
- 民事訴訟法學(xué)整套ppt課件完整版教學(xué)教程最全電子講義(最新)
- 2022義務(wù)教育小學(xué)科學(xué)課程標(biāo)準(zhǔn)(2022版)解讀(面向核心素養(yǎng)的科學(xué)教育)
- 河北省自然科學(xué)基金資助項目申請書模板
- 四年級奧數(shù)-容斥問題
- 常用標(biāo)準(zhǔn)波導(dǎo)和法蘭尺寸
- 損益平衡點(diǎn)的計算方法
- 小學(xué)二年級下冊音樂-第4課聆聽《吉祥三寶》3--人音版(簡譜)(10張)ppt課件
- 民用建筑電氣設(shè)計規(guī)范(消防)
- 電廠熱力試驗工試題
評論
0/150
提交評論