具体语法 - F合金中的字符串连续

时间:2017-11-21 22:39:29

标签: f-alloy lightning-workbench

我想知道如何在F-Alloy中连接两个字符串或一个字符串和一个整数?目前,为了加载一些依赖于整数值的图像,我正在做以下事情:

t.gainAttackPoints = 1 implies i.url = "platform:/resource/MBSD_DSL_Project/DSL/ConcreteSyntax/images/atkGain1.png" 
t.gainAttackPoints = 2 implies i.url = "platform:/resource/MBSD_DSL_Project/DSL/ConcreteSyntax/images/atkGain2.png"
t.gainAttackPoints = 3 implies i.url = "platform:/resource/MBSD_DSL_Project/DSL/ConcreteSyntax/images/atkGain3.png"

但是,我希望能够以某种方式与Java类似:

i.url = "platform:/resource/MBSD_DSL_Project/DSL/ConcreteSyntax/images/atkGain" + t.gainAttackPoints + ".png"

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

Alloy本身不支持字符串连接。字符串通常被抽象掉,因为语言主要用于推理概念和关系。

在项目中破解字符串连接的方法是将字段声明为字符串序列。然后,连接将在序列中附加一个字符串。

但是,对于您的问题,由于默认情况下提供的LightningVLM模型中声明了url字段,因此您无法自由使用字符串序列。通常不建议修改此模型。

<强> TL;博士

Alloy不支持字符串连接,遗憾的是你注定要在一个块中提供图像url :-(。 如果要保持值谓词干净,可能需要声明一个函数,为给定值t.gainAttackPoints返回正确的url。但是F-Alloy规范不支持函数声明,因此您必须在F-Alloy转换的源模型中声明它。