[英]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
,您將看到區別。
談到循環,代碼有兩個問題:
與其他語言中的while
循環不同, until
部分中的表達式是退出條件。 此條件為true
,循環退出。 在此代碼中,這是在第一次迭代時發生的(因為i = 0
且0 < 20
),即從未接觸過循環體。
變量i
在循環體內不變,並且對於所有循環迭代都具有相同的初始值。
次要評論:
在Eiffel中不需要諸如get_x
類的“ getter”方法。 您可以直接使用x
。
自初始化變量屬性在創建對象時設置為默認值。 特別是,當創建CLASS_1
類型的對象時, x
設置為0
。 在創建過程中使用x := 0
是無害的,但也無濟於事,除非您也希望將此過程用作常規過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.