所以我才开始学习埃菲尔.我正在使用的书中的第一个练习之一就是创建一个基本^ 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
Run Code Online (Sandbox Code Playgroud)
我该如何使用它?我需要它在同级别feature{NONE}的make?我知道我怎么称它是错的,我在我刚刚阅读的章节中找不到任何内容,或者在线如何将参数传递给它或如何使用它的结果.
原始代码有几个问题:
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
Run Code Online (Sandbox Code Playgroud)
之后,可以编译代码.现在不那么关键点:
将功能添加到专用功能子句是一种很好的风格,因此我会feature -- Basic operations在功能之前添加一行power.
该功能的实现power至少有两个问题.我不打算在这里详述它们,但会给出两个提示:
默认情况下,数字Result被初始化为0,这需要在不首先分配任何其他值的情况下考虑使用它的操作
即使将参数base传递给函数,power它仍然在原始版本的代码中未使用