Eiffel:转换方法在代理调用参数的情况下是不是有效?
Posted
技术标签:
【中文标题】Eiffel:转换方法在代理调用参数的情况下是不是有效?【英文标题】:Eiffel: are the convert methods working in case of agent call arguments?Eiffel:转换方法在代理调用参数的情况下是否有效? 【发布时间】:2018-11-20 17:12:47 【问题描述】:我正在调用一个带有 integer_64 参数的过程。我实现了一个 WATT 类,它可以从 INTEGER_64 创建它,似乎执行到这一点时停止,我错在哪里?
Catcall detected for argument#1
args':预期的 TUPLE [!WATT] 但得到了 TUPLE [INTEGER_64]`
附加案例(更新)
其实用语法检查的时候
attached INTEGER_64 my_watt_object as l_int
它也没有通过...这是预期的行为吗?
实际上,在我看来,语义案例是相同的,必须验证 conformity 步骤...对我来说(但似乎不是 language between conformance/conformity 的定义的情况) ) 上面写着
一致性和可兑换性是相互排斥的, 第87页
一致性规则对于定义为 convert
的类型是否有效,而我的情况是从 WATT 到 INTEGER_64?
【问题讨论】:
你能显示set_from_json_object的签名吗?同时调整网格列的大小,以便完全显示特征名称。 @Jocelyn thx,希望这次你得到了所有信息 我忘记了这篇文章,但在您的第一个屏幕截图中,您调用了一个例程代理set_charge
,它接受带有 INTEGER_64 参数的 WATT。因此,预计会收到 catcall 消息。对于您的“更新”,隐式转换不适用于本地对象测试(否则无法执行if attached INTEGER_64 ... elseif attached WATT ...
)。
【参考方案1】:
在 Eiffel 中,语言指定的转换仅在编译时起作用。如果重新附加的来源在编译时不符合重新附加的目标并且存在相应的转换功能,则适用。
在运行时不执行自动转换。如果你需要这个功能,你需要自己实现它。在您的示例中,如果参数类型为WATT
,则需要显式调用从INTEGER_64
到WATT
的转换,并传递WATT
类型的对象,而不是INTEGER_64
。
【讨论】:
Eiffel 是一种编译语言,没有解释器可以在运行时动态评估类型、执行检查和转换。以上是关于Eiffel:转换方法在代理调用参数的情况下是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章
在本地代理的情况下出现code=-500001的问题解决方法