BOO入門/鴨子類別型
< BOO入門
BOO入門 > 鴨子類別型 (上一章:巨集 下一章:使用Boo編譯器)
雖然 Boo 是個靜態型別的語言,但 Duck Typing 可以讓 Boo 看起來像是動態語言。Duck typing 讓變數能在執行時期才被認定,而不是在編譯時期。儘管這增加了簡單的感覺,但它的確排除了大量的安全關卡(Though this can add a sense of simplicity, it does remove a large security barrier.)。
// Duck Typing 範例
d as duck
d = 5 // 現在設為整數
print d
d += 10 // 它能作任何整數能做的事
print d
d = "Hi there" // 設置為字串
print d
d = d.ToUpper() // 同樣地,它也能作任何字串能做的事。
print d
輸出結果
5 15 Hi there HI THERE
如果你從工廠或從不可知的函式庫裡載入一些類別的話,Duck typing 非常有用。
要注意的是,booish 直譯器預設是把 duck typing 打開的。你可以使用 interpreter.Ducky = false 來把 duck typing 關閉。
這兒是另一個實用的 duck typing 範例。
// 實用的 Duck Typing
import System.Threading
def CreateInstance(progid):
type = System.Type.GetTypeFromProgID(progid)
return type()
ie as duck = CreateInstance("InternetExplorer.Application")
ie.Visible = true
ie.Navigate2("http://www.go-mono.com/monologue/")
while ie.Busy:
Thread.Sleep(50ms)
document = ie.Document
print("${document.title} 共有 ${document.fileSize} bytes。")
練習
编辑- 有沒有可以讓 duck typing 有用武之地的好例子呢?