我在尝试评估a4solution中的谓词时遇到以下错误:
第9行第2列的/ some / path中的致命错误:字段“字段 (A / Attribute&lt ;: type)“在期间未绑定到合法值 翻译。
以下是错误来源的代码:
for(ExprVar a : solution.getAllAtoms()){
// additional checks are here to assure that a is of an "appropriate type"
solution.eval(predicate.call(a));
}
我自己徒劳地尝试解决这个问题,我从这个来源http://code.google.com/p/alloy4eclipse/issues/detail?id=86读到,从文件中读取解决方案的方式可能会导致这个问题。 但消息来源没有提供进一步的细节。
我创建了我的解决方案对象,如下所示:
XMLNode xml = new XMLNode(new StringReader(source.getFileContent()));
this.solution = A4SolutionReader.read(new ArrayList<Sig>(), xml);
感谢您的支持
答案 0 :(得分:3)
问题是要评估的表达式(predicate.call(a)
)是从一个CompModule
对象(即从那里获取predicate
函数)中得到的,而解决方案对象是针对该对象的表达式被评估,不是从同一个CompModule获得,而是从文件中读取。
通常,在从xml文件中读取解决方案时,为了安全起见,建议从该xml文件重新读取所有,例如
XMLNode xmlNode = new XMLNode(new File("my_solution.xml"));
String alloySourceFilename = xmlNode.iterator().next().getAttribute("filename");
Module module = CompUtil.parseEverything_fromFile(rep, null, alloySourceFilename);
A4Solution ans = A4SolutionReader.read(module.getAllReachableSigs(), xmlNode);
在某些情况下,只需将sig从原始CompModule传递给重构的解决方案即可:
XMLNode xmlNode = new XMLNode(new File("my_solution.xml"));
A4Solution ans = A4SolutionReader.read(originalModule.getAllReachableSigs(), xmlNode);