首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改Eiffel中的类属性

修改Eiffel中的类属性
EN

Stack Overflow用户
提问于 2017-12-20 12:03:38
回答 1查看 104关注 0票数 0

早上好。我已经开始在大学里使用埃菲尔了。

我有一个例子:

代码语言:javascript
复制
    class
      CLASS_1

    create make

    feature
      x: INTEGER

      make
        do
         x:=0
        end

      increment(inc: INTEGER)
        do
          x:=x+inc
        end

      get_x: INTEGER
        do
          Result:=x
        end
    end

----------------
class
   CLASS_2

create make_2

feature
    make_2
        do
            print("EXAMPLE")
            meth_1
        end
    meth_1
    local
        instance: CLASS_1
        i: INTEGER
    do
        create instance.make
        from
            i:=0
        until
            i<20
        loop
            instance.increment(5)
        end
        io.put_string ("The result is: ")
        io.put_integer (instance.get_x)
    end
end

为什么结果总是0?它似乎没有更新值。我读过客户端类属性是只读的。是真的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-20 13:08:00

问题不在于变量属性,而在于循环从未执行的事实。只要删除循环,同时保持对过程increment的调用,您就会看到不同之处。

谈到循环,代码有两个问题:

  1. 与其他语言中的while循环不同,until部分中的表达式是一个退出条件。一旦这个条件是true,循环就会退出。在这段代码中,这发生在第一次迭代时(因为i = 00 < 20),即从未接触过循环体。
  2. 变量i不会在循环体中更改,并且对于所有循环迭代具有相同的初始值。

次要评论:

  • 在埃菲尔没有必要使用"getter“方法,比如get_x。您可以直接使用x
  • 在创建对象时,自初始化变量属性设置为默认值。特别是,当创建一个类型为x的对象时,CLASS_1被设置为0。在创建过程中使用x := 0是无害的,但也是无用的,除非您也希望将此过程作为常规过程使用。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47905666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档