Alloy 4 grammar允许签名声明(以及其他一些东西)携带 private
关键字 . 它还允许允许规范包含表单的枚举声明
enum nephews { hughie, louis, dewey }
enum ducks { donald, daisy, scrooge, nephews }
The language reference没有(据我所知)描述 private
关键字或 enum
构造的含义 .
有文件吗?或者它们是否在语法中作为为将来的规范保留的构造?
Alloy 4 grammar允许签名声明(以及其他一些东西)携带 private
关键字 . 它还允许允许规范包含表单的枚举声明
enum nephews { hughie, louis, dewey }
enum ducks { donald, daisy, scrooge, nephews }
The language reference没有(据我所知)描述 private
关键字或 enum
构造的含义 .
有文件吗?或者它们是否在语法中作为为将来的规范保留的构造?
2 回答
这是我对这两个关键字的非官方理解 .
在语义上等同于
private
关键字表示如果sig具有private
属性,则其标签在同一模块中是私有的 . 这同样适用于私有字段和私有函数 .除了之前接受的答案之外,我还想补充一些有用的见解,这些见解来自于
enum
上的Alloy的一周经验,特别是与标准sig
的主要区别 .如果你使用
abstract sig + extend
,你会想出一个模型,其中有许多集合对应于相同的概念 . 也许一个例子可以更好地澄清它 . 假设有类似的东西您可以选择使用
VS
在第一种情况下,我们可以将具有不同MinorDamage原子(MinorDamage0,MinorDamage1,...)的模型与Cars相关联,而在第二种情况下,您始终只有一个MinorDamage,不同的Cars可以参考这些 .
在这种情况下,使用
abstract sig + extend
表单可能有一定意义(因为您可以决定跟踪不同的MinorDamage或MajorDamage元素) .另一方面,如果你想拥有一个
currentState: set State
,最好使用一个映射概念,以便正好有三个
State
,每个Car
可以参考 . 通过这种方式,在Visualizer
中,您可以决定将模型投影到其中一个状态,并突出显示与此状态关联的所有Car
. 当然,你不能用abstract + extend
构造做到这一点,因为超过MajorDamage0
的投射只会突出显示与Damage
相关联的Car
而不是其他内容 .所以,总之,它实际上取决于你必须做什么 .
另外,请记住,如果你有一个由X元素组成的枚举并执行
其中Y <X,Alloy根本不产生任何实例 . 所以,在我们的最后一个例子中,我们不能有Y <3 .
作为最后一个注释,如果使用Magic Layout按钮,枚举并不总是出现在Visualizer中,但正如我之前所说,您可以在枚举上“投影”模型并在枚举的不同元素之间切换 .