修改 Eiffel 中的 class 个属性
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?它似乎没有更新值。
我读到客户端 class 属性是只读的。是真的吗?
问题不在于变量属性,而在于从未执行循环这一事实。只需删除循环,同时保持对过程的调用 increment
,您就会看到不同之处。
谈到循环,代码有 2 个问题:
不同于其他语言中的while
循环,until
部分的表达式是一个退出条件。一旦此条件为 true
,循环就会退出。在这段代码中,这发生在第一次迭代(因为 i = 0
和 0 < 20
),即没有接触循环体。
变量i
在循环体内没有变化,所有循环迭代的初始值都相同
次要评论:
埃菲尔不需要"getter"方法,比如get_x
。可以直接用x
自初始化变量属性设置为对象创建时的默认值。特别是,当创建 CLASS_1
类型的对象时,x
设置为 0
。在创建过程中使用 x := 0
是无害的,但也没有用,除非您也想将此过程用作常规过程。
早上好。 我开始在大学里使用 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?它似乎没有更新值。 我读到客户端 class 属性是只读的。是真的吗?
问题不在于变量属性,而在于从未执行循环这一事实。只需删除循环,同时保持对过程的调用 increment
,您就会看到不同之处。
谈到循环,代码有 2 个问题:
不同于其他语言中的
while
循环,until
部分的表达式是一个退出条件。一旦此条件为true
,循环就会退出。在这段代码中,这发生在第一次迭代(因为i = 0
和0 < 20
),即没有接触循环体。变量
i
在循环体内没有变化,所有循环迭代的初始值都相同
次要评论:
埃菲尔不需要"getter"方法,比如
get_x
。可以直接用x
自初始化变量属性设置为对象创建时的默认值。特别是,当创建
CLASS_1
类型的对象时,x
设置为0
。在创建过程中使用x := 0
是无害的,但也没有用,除非您也想将此过程用作常规过程。