理解 Alloy 中的“this”关键字
understanding the 'this' keyword in Alloy
在合金书第 4.7.2 节的以下代码中,this 关键字指的是什么?
module library/list [t]
sig List {}
sig NonEmptyList extends List {next: List, element: t}
...
fun List.first : t {this.element}
fun List.rest : List {this.next}
fun List.addFront (e: t): List {
{p: List | p.next = this and p.element = e}
}
如果您能详细说明合金中的此用法,我将不胜感激。
Software Abstractions 的第 4.5.2 节描述了(除其他外)它所谓的 'receiver' 约定,即写作的句法 shorthand函数和谓词为
fun X.f[y : Y, ...] { ... this ... }
而不是
fun f[x : X, y : Y, ...] { ... x ... }
即声明
fun List.first : t {this.element}
等同于(和shorthand/语法糖)
fun first[x : List] : t {x.element}
你给出的其他例子也是如此。如果我们说长形式是
,那么平行会更强
fun first[this : List] : t {this.element}
虽然这是一个有用的说明,但它是不合法的:this
是关键字,不能用作普通变量名。
您要求 "elaborate description" this
在 Alloy 中的用法。这是一项调查。关键字this
可用于以下情况:
在声明和签名事实中,this
充当隐式绑定到签名的每个实例的变量。所以形式的声明
sig Foo { ... } { copacetic[this] }
等同于
sig Foo { ... }
fact { all f : Foo | copacetic[f] }
在声明和签名事实中,每个对签名声明或继承的字段f
的引用都隐式扩展为this.f
,其中this
隐式如上所述绑定,除非引用以 @
为前缀。 4.2.4末尾的例子说明了语义。
在使用'receiver'约定声明的函数和谓词的声明体中,关键字this
充当隐式绑定到函数或谓词第一个参数的变量. 4.5.2 末尾的示例说明了这一点,OP 此处引用的示例也是如此。
'receiver' 约定在语言参考的 B.7.5 节中定义。
所有这些都指向 Software Abstractions 索引中 this
的条目;有关更多信息,请阅读相关段落。
在合金书第 4.7.2 节的以下代码中,this 关键字指的是什么?
module library/list [t]
sig List {}
sig NonEmptyList extends List {next: List, element: t}
...
fun List.first : t {this.element}
fun List.rest : List {this.next}
fun List.addFront (e: t): List {
{p: List | p.next = this and p.element = e}
}
如果您能详细说明合金中的此用法,我将不胜感激。
Software Abstractions 的第 4.5.2 节描述了(除其他外)它所谓的 'receiver' 约定,即写作的句法 shorthand函数和谓词为
fun X.f[y : Y, ...] { ... this ... }
而不是
fun f[x : X, y : Y, ...] { ... x ... }
即声明
fun List.first : t {this.element}
等同于(和shorthand/语法糖)
fun first[x : List] : t {x.element}
你给出的其他例子也是如此。如果我们说长形式是
,那么平行会更强fun first[this : List] : t {this.element}
虽然这是一个有用的说明,但它是不合法的:this
是关键字,不能用作普通变量名。
您要求 "elaborate description" this
在 Alloy 中的用法。这是一项调查。关键字this
可用于以下情况:
在声明和签名事实中,
this
充当隐式绑定到签名的每个实例的变量。所以形式的声明sig Foo { ... } { copacetic[this] }
等同于
sig Foo { ... } fact { all f : Foo | copacetic[f] }
在声明和签名事实中,每个对签名声明或继承的字段
f
的引用都隐式扩展为this.f
,其中this
隐式如上所述绑定,除非引用以@
为前缀。 4.2.4末尾的例子说明了语义。在使用'receiver'约定声明的函数和谓词的声明体中,关键字
this
充当隐式绑定到函数或谓词第一个参数的变量. 4.5.2 末尾的示例说明了这一点,OP 此处引用的示例也是如此。'receiver' 约定在语言参考的 B.7.5 节中定义。
所有这些都指向 Software Abstractions 索引中 this
的条目;有关更多信息,请阅读相关段落。