代码改变世界

也说Type Inference

2005-08-02 15:12  FantasySoft  阅读(3960)  评论(10编辑  收藏  举报
        看了Cavingdeep兄的Post,还有idior老大的comment,我又忍不住想说上两句了,因为Boo总能让我想起可爱的Python,还有正在茁壮成长的小小IronPython。:) 
        说到Type Inference,有一个概念是不得不提的,就是Dynamic Type(动态类型)和Static Type(静态类型)。静态语言就不必多说了,C++、Java和C#都是静态语言,它们最大的特点就是变量在使用之前都必须进行类型声明。而 Python。VB则是一种动态类型语言,所谓动态,通俗点说就是变量的类型是由最后赋予它的值决定的。怎么决定呢? 就是靠着Type Inference。 例如:

>>> test = "This is string"
>>> type(test)
<type 'str'>


变 量str的值是"This is string",所以str的类型是string(就是'str')。虽然动态语言依靠Type Inference,但是并非使用了Type Inference就一定是动态语言。Cavingdeep兄的post中给出的例子不仅仅说明了Type Inference,更说明了Boo与Python之间一个不同的地方:Boo事实上是一种静态语言,虽然它不需要为变量进行变量类型的声明。正如Cavingdeep兄给出的例子:

str = "string"
str 
= 1   
 
在Boo中会抛出Exception,但是在Python中,这样是没有问题的。 
        Boo与Python最大的一个不同之处就在于此:Boo拥有静态类型检查。 引用Boo语言之父的一句话以说明之:There were some minor things I didn't like and I also had to account for the needs of a statically typed language such as exact method signature declarations and such.

PS:再次拜读了Boo语言之父Rodrigo所写的BooManifesto,又一次被他的个性所深深打动。真的忍不住大叫:Wow,太Cool了!