Как использовать функции Eiffel?
Так что я только начинаю изучать Эйфелеву. Одно из первых упражнений в книге, которое я использую, говорит о создании функции, которая использует ^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}
"s make
? Я знаю, как я называю это неправильно, и я не могу найти ничего в главе, которую я только что прочитал, или в Интернете о том, как передать параметры в него или как использовать его результаты.
1 ответ
Есть несколько проблем с оригинальным кодом:
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
он не используется в оригинальной версии кода