Owerwrite通过其子类的父类变量

Jac*_*ack 0 ruby testing unit-testing ruby-on-rails

家长班:

account.rb

class Account
    attr_reader :owner, :interest
    attr_accessor :funds

    def initialize(args)
        @funds = args[:funds]
        @owner = args[:owner]
        @interest = 0.01
    end
end
Run Code Online (Sandbox Code Playgroud)

saving_account.rb

class SavingAccount < Account
    attr_reader :interest
    def initialize(args)
        @interest = 0.05
        super(args)
    end
end
Run Code Online (Sandbox Code Playgroud)

我跑的时候

saving_acc = SavingAccount.new(funds: 10000, owner: "Jack")
assert_equal(0.05, saving_acc.interest)
Run Code Online (Sandbox Code Playgroud)

我明白了:

NoMethodError:未定义的方法interests' for #<SavingAccount:0x007fa711853828> tests/saving_account_test.rb:13:intest_interests'

我究竟做错了什么?

fal*_*tru 5

super在分配之前更改呼叫顺序.

class SavingAccount < Account
    attr_reader :interest
    def initialize(args)
        super(args)
        @interest = 0.05
    end
end
Run Code Online (Sandbox Code Playgroud)

BTW,这是导致错误的拼写错误.

assert_equal(0.05, saving_acc.interests)
                                      ^
Run Code Online (Sandbox Code Playgroud)

除此之外,@interest不是类变量,而是实例变量.