有什麼方法檢查/測試變量的類型嗎?SML如何檢查變量類型?
我想用這樣的:
if x = int then foo
else if x = real then bar
else if x = string then ...
else .....
有什麼方法檢查/測試變量的類型嗎?SML如何檢查變量類型?
我想用這樣的:
if x = int then foo
else if x = real then bar
else if x = string then ...
else .....
ML語言都是靜態類型,因此它不可能爲某事有不同的類型在不同的時間。 x
有時不能有類型int
而在其他時間有string
類型。如果你需要這樣的行爲,正常的方式去了解它在編碼輸入信息,就像一個容器來包裝值:
datatype wrapper = Int of int | Real of real | String of string
然後你可以模式匹配的構造函數:
case x of Int x -> foo
| Real x -> bar
| String x -> ...
在這種情況下,x
顯然類型爲wrapper
,這樣會奏效。
這是不可能做你一般想要的東西,即使是x
多態型的(沒有做包裝自己是查克建議)。
這是一個慎重的設計決定;它可以就功能做出非常強有力的結論,只是基於它們的類型,否則就無法做出來。例如,它可以讓你說一個'a -> 'a
類型的函數必須是標識函數(或者一個總是拋出異常的函數,或者永不返回的函數)。如果你能檢查什麼'a
是在運行時,你可以寫一個鬼鬼祟祟的程序像
fun sneaky (x : 'a) : 'a = if x = int then infinite_loop() else x
這將違反規則。 (這是一個非常簡單的例子,但是通過知道你的類型系統有這個屬性可以做很多不太重要的事情。)