2015-11-11 27 views
1

我有一个非常奇怪的问题。 如果我们运行这个类,由于binding.pry,执行将在方法调用中被中断。Ruby初始化奇怪的参数性能

如果我们检查receiver的方法值为Ivo,如预期。但是`sender'的值就是这个对象,基本上就是params的数组。

["Gerard", 
"Ivo", 
#<Bank:0x007fb4339ac2b8 
    @accounts= 
    [#<Account:0x007fb4339ac240 @bank=#<Bank:0x007fb4339ac2b8 ...>, @founds=0, @user="Gerard">, 
    #<Account:0x007fb4339ac1f0 @bank=#<Bank:0x007fb4339ac2b8 ...>, @founds=0, @user="Ivo">]>, 
#<Bank:0x007fb4339ac2b8 
    @accounts= 
    [#<Account:0x007fb4339ac240 @bank=#<Bank:0x007fb4339ac2b8 ...>, @founds=0, @user="Gerard">, 
    #<Account:0x007fb4339ac1f0 @bank=#<Bank:0x007fb4339ac2b8 ...>, @founds=0, @user="Ivo">]>, 
1200] 

这是全班同学。任何解释?

require_relative './lib/bank' 

class TransferAgent 
    def initialize(sender, receiver, sender_bank, receiver_bank, amount) 
    @sender  = sender, 
    @receiver  = receiver, 
    @sender_bank = sender_bank, 
    @receiver_bank = receiver_bank, 
    @amount  = amount 
    end 

    def call 
    binding.pry 
    transfer_result = perform_transfer until transfer_result.succed? 
    end 

    private 

    attr_reader :sender, :receiver, :amount, :sender_bank, :receiver_bank 

    def perform_transfer 
    sender_account.transfer_money(receiver_account, amount) 
    end 

    def sender_account 
    @sender_account ||= sender_bank.account sender 
    end 

    def receiver_account 
    @receiver_account ||= receiver_bank.account receiver 
    end 
end 

bank_a = Bank.new 

bank_a.create_account("Gerard") 
bank_a.create_account("Ivo") 

TransferAgent.new("Gerard", "Ivo", bank_a, bank_a, 1200).call 

回答

2

在您的初始化程序中,摆脱尾随的逗号。整个初始化器被分解为一个单一的并行分配。

这是怎么回事的快速演示:

foo = 1,2,3 
foo 
=> [1,2,3] 

foo = 1, 
2, 
3 
foo 
=> [1,2,3]