Eiffel:在代理调用参数的情况下转换方法是否有效?

Eiffel: are the convert methods working in case of agent call arguments?

我正在调用一个参数为 integer_64 的过程。我实现了一个 WATT class,它可以从 INTEGER_64 创建它,似乎在达到这一点时执行停止,我哪里错了?

Catcall detected for argument#1args':预期 TUPLE [!WATT] 但得到 TUPLE [INTEGER_64]`

附案例(更新)

实际上在检查语法时

attached {INTEGER_64} my_watt_object as l_int

它也没有通过...这是预期的行为吗?

实际上,在我看来,语义情况是相同的,必须验证 conformity 步骤......对我来说(但似乎不是定义的情况language between conformance/conformity) 的

Conformance and convertibility are exclusive of each other, p.87

一致性规则是否对定义为 convert 的类型有效?我的情况是从 WATT 到 INTEGER_64?

在 Eiffel 中,语言指定的转换仅在编译时有效。如果编译时重新附加的源不符合重新附加的目标并且有相应的转换功能,则适用。

运行 时不执行自动转换。如果你需要这个功能,你需要自己实现。在你的例子中,如果参数类型是 WATT,你需要显式调用从 INTEGER_64WATT 的转换,并传递 WATT 类型的对象,而不是 INTEGER_64.