我实际上正在使用 C# - 但是 Nulls 的问题出现在本地开发人员团体(英国 Chester Devs)社交网站上,关于 nulls 的问题
对象 Person 具有 String 类型的属性,例如 Name,如果名称未知,则在 C# 中 Name 为 null
Eiffel 是否有比 C#(如果 x 为 null ...)更好的方法来处理这种常见的动态 void ?
我实际上正在使用 C# - 但是 Nulls 的问题出现在本地开发人员团体(英国 Chester Devs)社交网站上,关于 nulls 的问题
对象 Person 具有 String 类型的属性,例如 Name,如果名称未知,则在 C# 中 Name 为 null
Eiffel 是否有比 C#(如果 x 为 null ...)更好的方法来处理这种常见的动态 void ?
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
,这就是它的设计目的,因此通常不需要特殊类型。