2017-06-05 45 views
0
  1. 假设foo: ANY是一个可分配的实体。
  2. 当我做foo := create {BOOLEAN}会发生什么?

它总是失败,因为BOOLEAN(扩展型)不符合ANY(引用类型),正确吗?艾菲尔:扩展类型是否符合ANY?

+0

我的印象是,每种类型,扩展与否,都符合ANY。我测试该代码: foo:= create {BOOLEAN} 它工作。 –

回答

1

扩展类型符合引用类型(前提是满足其他一致性要求)。所以,你提到的例子工作得很好。此外,可以写foo := True

的关键区别这样reattachments之后是膨胀类型的复制语义被保留,即如果有ANY类型的实体bar,分配bar := foo将布尔对象的副本附加到bar,不相同的参考。因此,如果之后更改附加到foo的对象的值,则bar保持不变。

回答您的原题,BOOLEAN符合ANY

+0

那么如果'foo:INTEGER_8_REF',我可以做'foo:= create {INTEGER_8}'? – g4v3

+0

@ g4v3,是的,这应该没问题。顺便说一句,如果答案令人满意,您可以将其标记为已接受,以便SO用户可以看到问题得到解答。否则,欢迎您索取更多详细信息。 –

+0

是的,这就是我之前没有将它标记为已被接受的原因。我还没有完成你的答案。我想再问一件事。但我也在思考是否应该将其作为评论发表,还是作为自己的问题发表。我决定把它作为一个独立的问题发布。那么我会等你的回答! :) – g4v3