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 有用武之地的好例子呢?