型別系統的一些概念,眾說紛紜,使用上也比較亂。有些東西,甚至不好嚴格定義。以下算學術界的一種相對「嚴格」的說法。
首先了解一下基本概念
有了上面的概念,再討論強、弱型別,靜態、動態型別
偏向於不容忍隱式型別轉換,弱型別相對于強型別來說型別檢查更不嚴格,比如說允許變數型別的隱式轉換,允許強制型別轉換等等。強型別語言一般不允許這麼做。
弱型別>
"1"
+2
'12'
強型別>>>
"1"
+2
traceback (most recent call last):
file
""
, line 1,
in
typeerror: cannot concatenate
'str'
and
'int'
objects
其中靜態型別可以分為兩種:
簡單地說,就是在宣告了乙個變數之後,不能改變它的型別的語言,是靜態語言;能夠隨時改變它的型別的語言,是動態語言。因為動態語言的特性,一般需要執行時虛擬機器支援。
動態型別
>>> a = 1
>>>
type
(a)
<
type
'int'
>
>>> a =
"s"
>>>
type
(a)
<
type
'str'
>
靜態型別
prelude>
let
a =
"123"
:: int
:2:9:
couldn
't match expected type `int'
with actual
type
`[char]'
in the expression:
"123"
:: int
in an equation
for
`a': a =
"123"
:: int
下面是些例子
強型別與弱型別,靜態型別和動態型別
首先強弱是相對的。強型別 每個變數和物件都必須宣告型別,在編譯時確定好型別了,執行時不能更改。偏向於不容忍隱式型別轉換。譬如說haskell的int就不能變成double。弱型別 編譯時不確定型別,執行時根據語義確定是哪種型別。通俗地說,弱型別偏向於容忍隱式轉換,把不同型別的變數放在一起運算。靜態型...
弱型別 強型別 動態 靜態語言的區別
舉個例子 var a 5 var b 5 sumresult a b minresult a b 輸入sumresult的答案不是10,而是55,再次是將a的型別轉化為了字串,然後進行拼接。輸入minresult的答案是0,是將b的型別轉化為了數字,然後進行減法。強型別語言和弱型別語言區別 無論是強...
C語言中強型別 弱型別
強型別 以初始化的全域性資料 弱型別 未初始化的全域性資料 main.c includeshort x 10 short y 10 void func int main test.c int x void func 上邊列印出的結果為x 20,y 0。為什麼呢?乙個工程中有多個檔案,編譯時分開編譯。...