也说Type Inference
2005-08-02 15:12 FantasySoft 阅读(3963) 评论(10) 编辑 收藏 举报
看了Cavingdeep兄的Post,还有idior老大的comment,我又忍不住想说上两句了,因为Boo总能让我想起可爱的Python,还有正在茁壮成长的小小IronPython。:)
说到Type Inference,有一个概念是不得不提的,就是Dynamic Type(动态类型)和Static Type(静态类型)。静态语言就不必多说了,C++、Java和C#都是静态语言,它们最大的特点就是变量在使用之前都必须进行类型声明。而 Python。VB则是一种动态类型语言,所谓动态,通俗点说就是变量的类型是由最后赋予它的值决定的。怎么决定呢? 就是靠着Type Inference。 例如:
变 量str的值是"This is string",所以str的类型是string(就是'str')。虽然动态语言依靠Type Inference,但是并非使用了Type Inference就一定是动态语言。Cavingdeep兄的post中给出的例子不仅仅说明了Type Inference,更说明了Boo与Python之间一个不同的地方:Boo事实上是一种静态语言,虽然它不需要为变量进行变量类型的声明。正如Cavingdeep兄给出的例子:
在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了!
说到Type Inference,有一个概念是不得不提的,就是Dynamic Type(动态类型)和Static Type(静态类型)。静态语言就不必多说了,C++、Java和C#都是静态语言,它们最大的特点就是变量在使用之前都必须进行类型声明。而 Python。VB则是一种动态类型语言,所谓动态,通俗点说就是变量的类型是由最后赋予它的值决定的。怎么决定呢? 就是靠着Type Inference。 例如:
>>> test = "This is string"
>>> type(test)
<type 'str'>
>>> 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
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了!