2

我实际上正在使用 C# - 但是 Nulls 的问题出现在本地开发人员团体(英国 Chester Devs)社交网站上,关于 nulls 的问题

对象 Person 具有 String 类型的属性,例如 Name,如果名称未知,则在 C# 中 Name 为 null

Eiffel 是否有比 C#(如果 x 为 null ...)更好的方法来处理这种常见的动态 void ?

4

1 回答 1

2

Eiffel 允许void值(null在 C# 中)。但是,它确保永远不会调用 void 目标(即,没有NullReferenceException)。attached这是在编译时通过依赖于类型系统来detachable确保的(即从不null)。

在您的示例中,类声明将如下所示

class PERSON ... feature
   name: detachable STRING
end

然后在代码中它可以用作

p: PERSON
a: STRING
d: detachable STRING
...
d := p.name -- OK
a := p.name -- This is not allowed, because `a' is of an attached type.
if attached p.name as q then
   a := q -- OK
   ... -- Both `q' and `a' are equal to `p.name' and are attached.
else
   ... -- The name is `void', do something else.
end

当某些值可能存在或不存在时,可能有一个OPTION类型并依赖它,但是没有值自然由 表示void,这就是它的设计目的,因此通常不需要特殊类型。

于 2016-02-09T12:51:21.680 回答