早上好。我已经开始在大学里使用埃菲尔了。
我有一个例子:
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?它似乎没有更新值。我读过客户端类属性是只读的。是真的吗?
发布于 2017-12-20 13:08:00
问题不在于变量属性,而在于循环从未执行的事实。只要删除循环,同时保持对过程increment的调用,您就会看到不同之处。
谈到循环,代码有两个问题:
while循环不同,until部分中的表达式是一个退出条件。一旦这个条件是true,循环就会退出。在这段代码中,这发生在第一次迭代时(因为i = 0和0 < 20),即从未接触过循环体。i不会在循环体中更改,并且对于所有循环迭代具有相同的初始值。次要评论:
get_x。您可以直接使用x。x的对象时,CLASS_1被设置为0。在创建过程中使用x := 0是无害的,但也是无用的,除非您也希望将此过程作为常规过程使用。https://stackoverflow.com/questions/47905666
复制相似问题