如何在Eiffel中测试形式泛型类型的对象是否相等?

时间:2019-11-23 17:26:57

标签: eiffel eiffel-studio-18

我应该测试两个通用属性,例如

function get4fomDb() {
  return session.run("Match(n) return n");
}

async function controller() {
  try {
    let result = await get4fomDb();
    console.log("Promise results::", result);
  } catch (error) {
    console.error("Error from db promise::", error);
  } finally {
    session.close();
    driver.close();
  }
}

controller();

但是VUTA(目标规则有效性)说“ Object_call的单独目标不受控制”。我该怎么办?

2 个答案:

答案 0 :(得分:0)

好像去看医生...

Result := attached a as x and then attached b as y and then y.is_equal (x)

...亚历山大谢谢您的编辑

答案 1 :(得分:0)

有多种方法可以解决此问题,这些方法仅依赖于代码中的更改:

  1. 为形式通用参数添加非单独的约束。默认情况下,约束为detachable separate ANY。例如,如果您有声明

    class FOO [G] ...
    

    然后指定显式约束ANY(不使用separate)可以解决问题:

    class FOO [G -> ANY] ...
    

    通过此更改,所有类型G的实例也将被附加。如果应避免这种情况,应将约束ANY替换为detachable ANY,但应在使用前更新代码以检查属性是否已附加:

    Result := attached a as x and then attached b as y and then x.is_equal (y)
    
  2. 包装呼叫目标以使其受到控制。这是带有单独指令的示例(可以使用专用功能编写类似代码,例如,如果您有很多这样的相等性测试):

    separate a as x do
        Result := attached x and then attached b as y and then x.is_equal (b)
    end
    

如果不需要,也可以更改项目设置以避免使用SCOOP。