在 Eiffel 中,实体、变量、字段和参数之间有什么区别?
In Eiffel, what is the difference between entities, variables, fields and arguments?
我看过术语entity、variable和argument用来描述关于埃菲尔的事情,看起来和我很相似,我想了解使用其中一个术语而不是另一个术语背后的意图是什么。
Arguments — 某些例程需要一些数据才能 运行。想象一个虚构的特征 foo (x, y: INTEGER; z: BOOLEAN)
。此例程采用 3 个参数:x
、y
和 z
。调用例程时,必须为其提供三个有效参数,例如 foo(6, 92, False)
。我们传递给例程的这些值称为实际参数,而定义中定义的占位符称为正式参数.
我读过 对象字段,它指定对象结构中存储值的位置(引用或扩展对象)。
我认为我唯一一次看到术语 变量 是针对 局部变量,内部特征。
而entity似乎是用名称表示数据容器的通用术语,所以局部变量,arguments和querys(return一些数据的特征)都是entities.[=的例子17=]
Current
和 Result
属于哪个类别? 局部变量?
有人可以帮我解释一下术语吗?
您将在 ECMA Eiffel specification(标准 ECMA-367,第 8 节:语言规范)中看到这些术语的明确定义。
总结一下:
一个实体可以是:参数、局部、属性(包括常量属性)、当前或结果.
一个变量是局部变量或属性(不包括常量属性)。但是,我们经常将 Result 算作伪局部变量,因此也可以将其称为变量,但标准不是。
请注意,上述 none 包括例程(即过程或函数,在 Eiffel 术语中也称为命令和查询)。
规格
根据ISO/IEC 25436:2006(E) 和新添加的语言结构:
基于语法的术语
局部变量是以下任意一个:
- 在 Local_declarations 部分(特征主体,包括内联代理)中声明的标识符
- 预定义实体
Result
形式论证:
- 表示调用者传递的信息的标识符
实参:
- 例程特定调用中的表达式
变量属性是满足以下所有条件的特征声明:
- 没有正式论据
- 有一个查询标记(即它有一个类型)
- 没有明确的值(即它不是常数)
- 若有本体,则为属性种类
常量属性是满足以下所有条件的特征声明:
- 没有正式论据
- 有一个查询标记(即它有一个类型)
- 有明确的价值
集体条款
变量 是以下任何一项:
- 变量属性的最终名称
- 局部变量(包括
Result
)
只读实体 是以下任何一种:
- 正式论证
- 对象测试本地
- cursor local(在循环的[=116=]Iteration_part中)
- 单独本地(在Separate_instruction)
- 常量属性
Current
实体 是以下任何一项:
- 变量
- 只读实体
查询是以下任意一项:
- 属性
- 函数
即查询是一种具有类型的特征,可用于在 运行 时间获取值。
语义术语
字段:
- 非基本类型的直接实例中的值,对应于属性
例子
class C feature
pi: REAL_32 = 3.14
double (x: LIST [INTEGER]): LIST [INTEGER]
local
r: ARRAYED_LIST [INTEGER]
do
create r.make (x.count)
across x as c loop
r.extend (c.item * 2)
end
Result := r
end
average_age: NATURAL
count: NATURAL
print_list (x: LIST [PERSON])
do
average_age := 0
count := 0
x.do_all (agent (p: PERSON)
do
if attached p.name as n then
io.put_string (n + ": " + p.age.out + "%N")
average_age := average_age + p.age
count := count + 1
end
end)
if count > 0 then
average_age := average_age // count
end
end
end
基于语法的术语
局部变量:r
,Result
。
本地对象测试:n
.
本地光标:c
.
形式论证:x
,p
。
实际参数:x.count
、2
(这是乘法的参数)、c.item * 2
、": "
(在字符串连接中)、p.age.out
, "%N"
, n + ": " + p.age.out + "%N"
, p.age
, 1
, 0
, count
(除法).
变量属性: average_age
, count
.
常量属性:pi
.
集体条款
变量:r
、Result
、average_age
、count
。
只读实体:pi
、n
、c
、x
、p
.
实体:pi
、r
、Result
、average_age
、count
、n
、c
、x
, p
.
查询:pi
、double
、average_age
、count
。
我看过术语entity、variable和argument用来描述关于埃菲尔的事情,看起来和我很相似,我想了解使用其中一个术语而不是另一个术语背后的意图是什么。
Arguments — 某些例程需要一些数据才能 运行。想象一个虚构的特征 foo (x, y: INTEGER; z: BOOLEAN)
。此例程采用 3 个参数:x
、y
和 z
。调用例程时,必须为其提供三个有效参数,例如 foo(6, 92, False)
。我们传递给例程的这些值称为实际参数,而定义中定义的占位符称为正式参数.
我读过 对象字段,它指定对象结构中存储值的位置(引用或扩展对象)。
我认为我唯一一次看到术语 变量 是针对 局部变量,内部特征。
而entity似乎是用名称表示数据容器的通用术语,所以局部变量,arguments和querys(return一些数据的特征)都是entities.[=的例子17=]
Current
和 Result
属于哪个类别? 局部变量?
有人可以帮我解释一下术语吗?
您将在 ECMA Eiffel specification(标准 ECMA-367,第 8 节:语言规范)中看到这些术语的明确定义。
总结一下:
一个实体可以是:参数、局部、属性(包括常量属性)、当前或结果.
一个变量是局部变量或属性(不包括常量属性)。但是,我们经常将 Result 算作伪局部变量,因此也可以将其称为变量,但标准不是。
请注意,上述 none 包括例程(即过程或函数,在 Eiffel 术语中也称为命令和查询)。
规格
根据ISO/IEC 25436:2006(E) 和新添加的语言结构:
基于语法的术语
局部变量是以下任意一个:
- 在 Local_declarations 部分(特征主体,包括内联代理)中声明的标识符
- 预定义实体
Result
形式论证:
- 表示调用者传递的信息的标识符
实参:
- 例程特定调用中的表达式
变量属性是满足以下所有条件的特征声明:
- 没有正式论据
- 有一个查询标记(即它有一个类型)
- 没有明确的值(即它不是常数)
- 若有本体,则为属性种类
常量属性是满足以下所有条件的特征声明:
- 没有正式论据
- 有一个查询标记(即它有一个类型)
- 有明确的价值
集体条款
变量 是以下任何一项:
- 变量属性的最终名称
- 局部变量(包括
Result
)
只读实体 是以下任何一种:
- 正式论证
- 对象测试本地
- cursor local(在循环的[=116=]Iteration_part中)
- 单独本地(在Separate_instruction)
- 常量属性
Current
实体 是以下任何一项:
- 变量
- 只读实体
查询是以下任意一项:
- 属性
- 函数
即查询是一种具有类型的特征,可用于在 运行 时间获取值。
语义术语
字段:
- 非基本类型的直接实例中的值,对应于属性
例子
class C feature
pi: REAL_32 = 3.14
double (x: LIST [INTEGER]): LIST [INTEGER]
local
r: ARRAYED_LIST [INTEGER]
do
create r.make (x.count)
across x as c loop
r.extend (c.item * 2)
end
Result := r
end
average_age: NATURAL
count: NATURAL
print_list (x: LIST [PERSON])
do
average_age := 0
count := 0
x.do_all (agent (p: PERSON)
do
if attached p.name as n then
io.put_string (n + ": " + p.age.out + "%N")
average_age := average_age + p.age
count := count + 1
end
end)
if count > 0 then
average_age := average_age // count
end
end
end
基于语法的术语
局部变量:r
,Result
。
本地对象测试:n
.
本地光标:c
.
形式论证:x
,p
。
实际参数:x.count
、2
(这是乘法的参数)、c.item * 2
、": "
(在字符串连接中)、p.age.out
, "%N"
, n + ": " + p.age.out + "%N"
, p.age
, 1
, 0
, count
(除法).
变量属性: average_age
, count
.
常量属性:pi
.
集体条款
变量:r
、Result
、average_age
、count
。
只读实体:pi
、n
、c
、x
、p
.
实体:pi
、r
、Result
、average_age
、count
、n
、c
、x
, p
.
查询:pi
、double
、average_age
、count
。