我实际上使用的是C# -但是Nulls的问题出现在一个本地开发人员团体(Chester Devs,UK)的社交网站上,关于nulls的问题
对象Person有一个String类型的属性,比如Name。如果名称未知,则在C#中name为空
Eiffel有没有比C#更好的方法(如果x为null ...)来处理这种常见的动态空洞?
发布于 2016-02-09 20:51:22
Eiffel允许void值(C#中的null)。但是,它确保永远不会在空目标上进行调用(即,没有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表示,这就是设计它的目的,因此通常不需要特殊类型。
https://stackoverflow.com/questions/35291437
复制相似问题