Я беру класс, и они дали мне мою первую попытку использовать модуль в рубине для программы «Банковская учетная запись».Наследование дочерних классов с включенным модульным методом из родительских классов в Ruby
Вот вопрос ..
Создать модуль под названием Процентный. Проценты должны иметь метод calculate_interest (баланс, months, interest_amount), который устанавливает новый баланс учетной записи. Он умножает количество месяцев, начисленных на сумму процентов, добавляет их на баланс и возвращает новый баланс.
Давайте также создадим метод complex_interest, который не принимает никаких параметров. И SavingsAccount, и CheckingAccount должны реализовать complex_interest. Интерес к CheckingAccount составляет 10 долларов США каждый месяц и начисляется каждые три месяца. Проценты по SavingsAccount составляют 5 долларов США каждый месяц и начисляются каждые шесть месяцев. Используйте метод Interest.calculate_interest в методах complex_interest, чтобы установить новый баланс в учетной записи.
Тогда я дал этот код ...
module Interest
end
class BankAccount
include Interest
end
class CheckingAccount < BankAccount
end
class SavingsAccount < BankAccount
end
Я пытался в течение нескольких часов, чтобы понять, почему я не могу заставить его работать. Вот что я до сих пор.
module Interest
def calculate_interest(balance, months, interest_amount)
balance += (months*interest_amount)
balance
end
end
class BankAccount
attr_accessor :balance
include Interest
def initialize(balance)
@balance = balance
end
end
class CheckingAccount < BankAccount
def initialize(balance)
super(balance)
end
def compound_interest
balance = Interest.calculate_interest(balance, 3, 10)
balance
end
end
class SavingsAccount < BankAccount
def initialize(balance)
super(balance)
end
def compound_interest
balance = Interest.calculate_interest(balance, 6, 5)
balance
end
end
Я очень новичок в этом, поэтому я уверен, что мой код довольно простой, пожалуйста, извините. Во всяком случае, я получаю эту ошибку ...
NoMethodError
undefined method `calculate_interest' for Interest:Module
exercise.rb:24:in `compound_interest'
exercise_spec.rb:31:in `block (3 levels) in <top (required)>'
Если мои дочерние классы наследуют модульный метод, я не понимаю, как метод модуль не может быть найден при вызове на них.
Для дальнейшей ссылки здесь спецификации
describe BankAccount do
describe "initialization" do
it "takes an initial balance" do
acc = BankAccount.new(283)
expect(acc.balance).to eq(283)
end
end
describe "#new" do
it "returns the balance" do
acc = BankAccount.new(283)
expect(acc.balance).to eq(283)
end
end
end
describe CheckingAccount do
it "has BankAccount as its parent class" do
expect(CheckingAccount.superclass).to eq(BankAccount)
end
it "includes the module Interest" do
expect(CheckingAccount.ancestors).to include(Interest)
end
describe "#compound_interest" do
it "compounds the balance by the specified interest rate" do
acc = CheckingAccount.new(283)
new_balance = acc.compound_interest
expect(new_balance).to eq(283 + 3 * 10)
end
end
end
describe SavingsAccount do
it "has BankAccount as its parent class" do
expect(SavingsAccount.superclass).to eq(BankAccount)
end
it "includes the module Interest" do
expect(SavingsAccount.ancestors).to include(Interest)
end
describe "#compound_interest" do
it "compounds the balance by the specified interest rate" do
acc = SavingsAccount.new(283)
new_balance = acc.compound_interest
expect(new_balance).to eq (283 + 6 * 5)
end
end
end
Извините за то, что так длинно, я просто хочу, чтобы дать вам ту же информацию, у меня есть.
Подсказка: какой объект являются функции вызова 'compound_interest' дальше? Какой объект * вы * вызываете 'complex_interest'? Каков класс объекта, на который вы вызываете 'complex_interest'? Имеет ли этот класс или любой из его предков метод 'complex_interest'? –
К сожалению, «длительный» - это не то же самое, что «конкретный», совершенно наоборот. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). В вашем вопросе есть много постороннего пуха, который не имеет отношения к проблеме и затрудняет понимание, где находится * актуальная * проблема.(Я только наткнулся на него удачей.) –
Ты меня потерял. Я тоже не понимаю спецификации. –