Type Inference & Duck Typing

本来是要分开写Type Inference和Duck Typing的,不过后来发现Boo的官方网站已经写的比较详细了,所以我这里就把这两项特性合并起来简单介绍一下吧。

Type Inference

所谓的Type Inference(类型推断)就是根据已知条件来推断一个变量的类型,比如如果我有:

str  =   " This is a string "

 

那么变量str将被判断成System.String类型,在这之后的操作都按照System.String类型进行。假如我有这么一段代码:

str  =   " string "
str 
=   1

 

这段代码会抛出一个异常,因为str已经是System.String了就不能再给它赋一个System.Int32类型的值了。以上就是简单的Type Inference,下面还有一些示例:

None.gif def Method():
None.gif   
return   " string return type "
None.gif
None.gif
class  A:
None.gif   
private  name  =   ""
None.gif   
None.gif   # Name属性被推断为name的类型,也就是System.String。
None.gif   Name:
None.gif      
get :
None.gif         
return  name

 

Duck Typing

所谓的Duck Typing和以前VB的中的variant比较相像,但又完全不同,variant是一个指定的类型,而duck却不是什么指定的类型,而是一个替代品,它可以替代任何类型,比如:

def Sum(a  as  duck, b  as  duck):
   
return  a  +  b

 

这里我可以传进去int,也可以传double,甚至string,虽然会抛异常,也就是说,使用duck的话就不能控制类型了,这也正是duck的用处。一般来说不建议使用Duck Typing,不过可以在自己做小试验的时候使用,这样比较容易试验,不需要考虑类型,比如在Boo的Interpreter下。另外可以利用duck来解决一些Visitor模式相关的问题,还有就是Mixin之类的AOP特性也可以借用Duck Typing来实现。

如果你决定了要在正式版本中使用duck的话,请注意duck的性能是比有类型的变量低的,因为duck底层的实现其实就是把类型定位成Object,然后通过反射调用其成员,因为是字符串指定所以没问题,但是因为是反射所以性能要低些。

转载于:https://www.cnblogs.com/cavingdeep/archive/2005/08/02/205429.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值