在Pascal中,可以声明联合类型:
AnimalType = (Dog, Cat);
Animal = record
name: string;
case myType: AnimalType of
Dog: (weight: Integer);
Cat: (age: Integer);
end;
然而,违反 case
的契约非常容易:
var
a: Animal;
begin
a.name := 'Kittie';
a.myType := Cat;
a.weight := 10; // There is no weight for cats!
writeln(a.age); // Prints 10
end.
这个示例存在语义错误,但编译器成功地进行了类型检查。此外,在运行时也没有出现错误。
那么,case
块只是为了文档目的而存在吗?
case
块的目的。它是否会对任何东西产生影响? - ZhekaKozlovcase
分支会影响什么吗?如果我交换Dog
和Cat
,会有什么不同吗? - ZhekaKozlov