我已经看到术语实体,变量和参数用于描述有关Eiffel的内容,看起来非常类似于我,我想了解使用任何一个术语而不是另一个术语背后的意图。
参数 - 某些例程需要一些数据才能运行。想象一下虚构的特征foo (x, y: INTEGER; z: BOOLEAN)
。此例程需要3个参数:x
,y
和z
。调用例程时,必须为其提供三个有效参数,例如foo(6, 92, False)
。我们传递给例程的这些值称为实际参数,而定义中定义的占位符称为形式参数。
我读过对象字段,它指定了存储值的对象结构中的位置(引用或扩展对象)。
我认为我唯一一次看到变量一词是针对局部变量,内部功能。
实体似乎是表示具有名称的数据容器的通用术语,因此局部变量,参数和< em> querys (返回某些数据的功能)都是实体的示例。
Current
和Result
会落在哪个类别? 本地变量?
有人可以帮我解释术语吗?
答案 0 :(得分:1)
您会在ECMA Eiffel specification(标准ECMA-367,第8节:语言规范)中看到这些术语的明确定义。
总结:
实体是:参数,本地,属性(包括常量属性),当前或结果。
变量是本地或属性(不包括常量属性)。但是,我们经常将 Result 视为伪本地,因此可以将其称为变量,但标准不会。
请注意,以上都不包括例程(即过程或函数,也称为Eiffel术语中的命令和查询)。
答案 1 :(得分:1)
根据ISO / IEC 25436:2006(E)和新增的语言结构:
本地变量是以下任何一项:
Result
正式论证:
实际参数:
变量属性是满足以下所有条件的要素声明:
常量属性是满足以下所有条件的要素声明:
变量是以下任何一项:
Result
)只读实体是以下任何一种:
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
,{ {1}},"%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
,{{1 },c
。
查询:x
,p
,pi
,double
。