在Eiffel中,实体,变量,字段和参数之间有什么区别?

时间:2017-06-08 16:21:00

标签: eiffel language-concepts

我已经看到术语实体变量参数用于描述有关Eiffel的内容,看起来非常类似于我,我想了解使用任何一个术语而不是另一个术语背后的意图

参数 - 某些例程需要一些数据才能运行。想象一下虚构的特征foo (x, y: INTEGER; z: BOOLEAN)。此例程需要3个参数:xyz。调用例程时,必须为其提供三个有效参数,例如foo(6, 92, False)。我们传递给例程的这些值称为实际参数,而定义中定义的占位符称为形式参数

我读过对象字段,它指定了存储值的对象结构中的位置(引用或扩展对象)。

我认为我唯一一次看到变量一词是针对局部变量,内部功能。

实体似乎是表示具有名称的数据容器的通用术语,因此局部变量参数和< em> querys (返回某些数据的功能)都是实体的示例。

CurrentResult会落在哪个类别? 本地变量

有人可以帮我解释术语吗?

2 个答案:

答案 0 :(得分:1)

您会在ECMA Eiffel specification(标准ECMA-367,第8节:语言规范)中看到这些术语的明确定义。

总结:

实体是:参数,本地,属性(包括常量属性),当前结果

变量是本地或属性(不包括常量属性)。但是,我们经常将 Result 视为伪本地,因此可以将其称为变量,但标准不会。

请注意,以上都不包括例程(即过程或函数,也称为Eiffel术语中的命令和查询)。

答案 1 :(得分:1)

规范

根据ISO / IEC 25436:2006(E)和新增的语言结构:

基于语法的术语

本地变量是以下任何一项:

  • Local_declarations 部分(功能正文,包括内联代理)中声明的标识符
  • 预定义实体Result

正式论证

  • 表示来电者传递的信息的标识符

实际参数

  • 对例行程序的特定调用中的表达式

变量属性是满足以下所有条件的要素声明:

  • 没有正式的论点
  • 有一个查询标记(即它有一个类型)
  • 没有明确的价值(即它不是常数)
  • 如果有正文,则为属性种类

常量属性是满足以下所有条件的要素声明:

  • 没有正式的论点
  • 有一个查询标记(即它有一个类型)
  • 有明确的值

集体条款

变量是以下任何一项:

  • 变量属性的最终名称
  • 本地变量(包括Result

只读实体是以下任何一种:

  • 正式论证
  • 对象测试本地
  • 游标本地(在循环的 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

基于语法的术语

本地变量:rResult

对象测试本地:n

光标本地:c

正式论证:xp

实际参数:x.count2(这是乘法的参数),c.item * 2": "(在字符串连接中),p.age.out,{ {1}},"%N"n + ": " + p.age.out + "%N"p.age10(在分组中)。

变量属性:countaverage_age

常量属性:count

集体条款

变量:pirResultaverage_age

只读实体:countpincx

实体:ppirResultaverage_agecountn,{{1 },c

查询:xppidouble