簡體   English   中英

修改Eiffel中的類屬性

[英]Modify class attributes in Eiffel

早上好。 我已經開始在大學使用Eiffel。

我有這個例子:

    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? 似乎它不會更新值。 我讀過,客戶端類屬性是只讀的。 是真的嗎

問題不在於變量屬性,而在於循環從未執行。 只需刪除循環,同時保持對過程的調用increment ,您將看到區別。

談到循環,代碼有兩個問題:

  1. 與其他語言中的while循環不同, until部分中的表達式是退出條件。 此條件為true ,循環退出。 在此代碼中,這是在第一次迭代時發生的(因為i = 00 < 20 ),即從未接觸過循環體。

  2. 變量i在循環體內不變,並且對於所有循環迭代都具有相同的初始值。

次要評論:

  • 在Eiffel中不需要諸如get_x類的“ getter”方法。 您可以直接使用x

  • 自初始化變量屬性在創建對象時設置為默認值。 特別是,當創建CLASS_1類型的對象時, x設置為0 在創建過程中使用x := 0是無害的,但也無濟於事,除非您也希望將此過程用作常規過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM