2012-07-17 60 views
1

我試圖理解爲什麼Smalltalk有時被稱爲「動態類型」,而不是「無類型」,我也讀了很多,而且看起來很有意義。爲什麼Smalltalk有時被稱爲「動態類型」?

在Smalltalk中沒有變量,參數和方法返回的類型註釋 - 那麼你會如何比較對象的類型(如果你說對象的類型是它的類)呢?

此外動態類型是不一樣的動態類型檢查?因此,如果Smalltalk是動態類型化的,那麼意味着,內部Smalltalk會在運行時爲變量,參數和方法返回提供類型?可以?

回答

4

「動態類型」被廣泛應用於特定的編程語言社區表示「動態檢測」。同樣,在更多以理論爲導向的圈子中,人們普遍認爲這在技術上是誤導性的,因爲被檢查的內容不是任何形式上的類型。但是,現在這種用法在任何糾正機會的情況下都很常見。

另見我的回答對the inverse question多一點背景。

+0

謝謝你,我已經閱讀過你的JavaScript回答。 – 2012-07-17 14:24:08

+0

但它是什麼,這是「動態檢查」?我的意思是什麼可以檢查?分配和方法調用?在Smalltalk中以任何方式檢查任務?和消息發送動態綁定到方法 - 但有沒有「檢查」完成? 「MessageNotUnderstood」算作「檢查」嗎? – 2012-07-17 14:27:30

+0

好吧,對於某些原始操作,你必須檢查某個類是否是一個實例,我猜想。這是例如原始「二元方法」的情況下,例如添加。 – 2012-07-17 18:14:28

3

一個慣例是編程語言沿兩個維度比較:

  • 從動態鍵入連續
  • 一個連續的強類型到靜態類型以弱類型

動態類型往往意味着在編譯時不檢查類型,而用於靜態類型。

強類型往往意味着類型在運行時是一個獨特的類型,其從不改變,而弱類型意味着基礎類型可以根據上下文來改變的。

據說Smalltalk有強烈的動態分類。

2

在Smalltalk中每個對象都有類型 - 類定義了可以在它的情況下進行操作(如何)。所以當你發送消息給某個對象時,它的類會檢查消息是否可以被處理以及如何處理。

在相反的另一隻手來靜態類型語言,變量可以在程序的生命週期包含不同類型的不同的對象,因此不存在變量(或參數)的類型檢查。

正如達米安建議的優秀文章指出 - 類型的概念是在靜態和動態類型語言完全不同。如果嘗試直接比較,這種差異會導致很多混淆。

相關問題