所以我才开始学习埃菲尔。我正在使用的书中的第一个练习之一就是创建一个基本^ exp而不使用^的函数。我在下面复制了我的代码。
class
APPLICATION
inherit
ARGUMENTS
create
make
feature {NONE} -- Initialization
make
-- Run application.
do
create power(2;3)
printf("2 to the power of 3 is " + answer)
end
power(base : REAL; exp : INTEGER) : REAL
-- computers base raised to the bower of exp without using ^
local
remain : INTEGER
do
remain := exp
if remain = 0 then
result := 1
else
from
until
remain = 0
loop
result := result * result
remain := remain -1
end
end
end
end
我该如何使用它?我是否需要与feature{NONE}
的{{1}}相同的级别?我知道我怎么称它是错的,我在我刚刚阅读的章节中找不到任何内容,或者在线如何将参数传递给它或如何使用它的结果。
答案 0 :(得分:6)
原始代码有几个问题:
create
用于创建一个对象,但是你不打算创建任何东西,而是通过调用它来获得函数power
的计算结果。因此,不需要关键字create
。
您正在使用实体answer
在屏幕上报告评估结果。但是它没有在任何地方声明。我相信适当的地方是局部变量声明部分。
实体answer
未初始化为函数power
的结果。这通常由分配指令完成。
功能参数用逗号分隔,而不是用分号分隔。
从原始代码来看,它不清楚变量answer
的类型是什么。假设它匹配函数power
的类型,在将其添加到字符串之前,需要将其转换为字符串。这是通过调用功能out
。
将字符串打印到控制台的标准功能是print
,而不是printf
。
结合上面的关键点,我们得到
make
-- Run application.
local
answer: REAL
do
answer := power(2, 3)
print ("2 to the power of 3 is " + answer.out)
end
之后可以编译代码。现在不太重要的一点:
将功能添加到专用功能条款是一种很好的风格,因此我会在功能feature -- Basic operations
之前添加power
之类的行。
功能power
的实现至少有两个问题。我不打算在这里详述它们,但会给出两个提示:
默认情况下,数字Result
初始化为0
,对于使用它的操作,无需先指定任何其他值,就需要考虑这一点
即使将参数base
传递给函数power
,它仍然未在原始版本的代码中使用