J2EE Development without EJB动态- -| 回首页 | 2004年索引 | - -为什么成员变量要加下划线

Curl的类型体系- -

                                      

Curl是带有泛型的语言。这不是新鲜事,现在所有的主流OO语言都支持泛型。不过Curl有一个很好的泛型应用。对于每一个类型,都有一个与之对应的Nullable类型。譬如说:
 
{define-class Dog {inherits Animal}}
 
实际上的情况是:
 
{alias #Dog {Nullable-of Dog}}
{define-class public Dog {inherits #Dog, Animal}}
 
也就是说,你不能把一个null值赋给类型为Dog的变量(或者参数),却可以赋给类型为#Dog的变量(或者参数)。而且Dog是可以隐式转型为#Dog的,#Dog要变成Dog则需要显式转型。譬如下面这个方法:
 
{method public {kill dog:#Dog} : Dog
  {if dog == null then
    {error "没有狗,我杀什么杀?"}
  }
  {dog.die}
  {return dog asa Dog}
}
 
这么一来,使用kill方法的人就不用再操心会不会得到一只“null狗”,只管调用这条死狗的方法好了,不会有NullPointerException出来。另一方面,往kill方法里传参数的时候也知道:这个参数可以为null,kill方法自己会搞定“杀null狗”的情况,我就不必再多做一遍检查,只管往里面传就是了。我觉得Java也应该加入这样的类型体系,可以避免很多NullPointerException——这是最难调的异常,因为它总是不带任何调试信息。

- 作者: gigix 2004年08月24日, 星期二 12:42

Trackback

你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=295248

回复

- 评论人:curlman

Tue Jul 05 22:20:33 CST 2005  作者Blog

是C#2.0和Curl相似,而不是相反。 Curl是1995年诞生的,没有得到推广而已

- 评论人:dali

Thu Aug 26 09:23:15 CST 2004  作者Blog

C# 2.0 可以用“?”简写Nullable,如
int? a = null;

比 #Dog 好看了不少呀

- 评论人:Justin

Tue Aug 24 18:11:13 CST 2004  作者Blog

似乎和C#2.0中新加入的 class Nullable<T> 非常相似。

评论内容: