Re: [問題] 關於強型態語言定義的問題

看板PLT (程式語言與理論)作者 (一卡)時間7年前 (2017/01/21 00:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《cat99961 (阿湯)》之銘言: : 請問我唸書時念到有關於強型態語言的定義,擷取部分內容如下: : 強勢型態程式語言符合下列要求: : 1. 每一個變數都靜態地繫結到單一資料型態 : 2. 變數資料型繫結後,在程式執行過程不能修改其資料型態 : 3. 當允許一個變數儲存不同資料型態之值時,其值的型態可以靜態地或動態地檢查出來 : 4..... : 5.... : 請問這1、2點和第3點不是互相矛盾嗎?前2點說一個變數只能是單一資料型態, : 且型態不能修改,第3點又說允許一個變數存不同資料型態 : 請問有誰可以告訴我呢? : 關於第3點可否舉例讓我明白呢? : 感激不盡… 關於 type system 實際上到底怎麼分類,有興趣可以查查看。 我假設你已經會 C 了,以 C 來講第 3 點,先用 union 舉例,假設我有個 union type Num,它由 int 跟 float 組成。 union Num { int Int; float Float; } 當我宣告一個變數的 type 是 Num 的時候,這個變數就可以儲存 int 也可以儲存 float 了。 那麼現在問題來了,這個變數在初始化過後,我這邊假設是初始化儲存 Num.Int,那麼我 這個變數的 type 是什麼? 肯定不是 float,所以是 int 嗎? 不是,這個變數的 type 還是 Num,只是它儲存了 type int 的資料而已,於是這變數就符合 1 跟 2 了。 struct 也是同樣的概念,不論我的 struct 怎麼設計怎麼存,我最後的 type 都是那個 struct。 這邊額外提一下 ada,在 ada 標準中有一個叫作 Variant record 的設計,這允許開發 者宣告兩個變數,雖然它們的 type 相同,但內容完全不同,這是用來做出類似 C union 效果的方法,就結果來說其實不完全符合 3,或者說直接把 3 砍掉了這樣..... 附上範例程式碼。 https://git.io/vM9BS 不過這個做法跟 C 的 union 還是不同,詳細差異我就不說了,在新標準中可以直接使用 C 版本的 union 則又是另外一件事了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.1.216 ※ 文章網址: https://www.ptt.cc/bbs/PLT/M.1484929140.A.0B5.html
文章代碼(AID): #1OWZXq2r (PLT)
文章代碼(AID): #1OWZXq2r (PLT)