2016-06-01 46 views
0

而不是打電話cop_log.read_spreadsheet當我使用ChangeOrderLog.new('path/to/file')時,如何直接在我的班級中調用方法read_spreadsheet如何在對象初始化時調用方法?

cop_log.read_spreadsheet用excel電子表格中的數據填充@cop_log散列,有沒有什麼辦法可以在我的ChangeOrderLog類中填充我的散列而不是在其外部?

require 'creek' 

class ChangeOrderLog 
    attr_reader :creek, :sheet 
    attr_accessor :cop_log 
    def initialize(file) 
    @creek = Creek::Book.new file 
    @sheet= @creek.sheets[0] 
    @cop_log = {} 
    end 
    def read_spreadsheet 
    sheet.rows.each { |row| cop_log.merge!(row) } 
    end 
    def job_number 
    return cop_log['G1'] 
    end 
end 

cop_log = ChangeOrderLog.new('path/to/file') 
cop_log.read_spreadsheet 
puts cop_log.job_number 
+1

把它放在'initialize'中。 – Schwern

回答

2

的對象已經由時間initialize存在被調用,它只是尚未初始化。因此,您可以調用initialize中的方法,但在對象的其餘部分已初始化後執行此操作,尤其是@sheet

def initialize(file) 
    @creek = Creek::Book.new file 
    @sheet= @creek.sheets[0] 
    @cop_log = {} 

    read_spreadsheet 
    end 

read_spreadsheetself.read_spreadsheet簡寫。 self是被調用的對象initialize(或任何其他方法)。在這種情況下,self是您新創建的ChangeOrderLog對象。

1

您可以調用其他方法內的方法,initialize也不例外:

def initialize(file) 
    @creek = Creek::Book.new file 
    @sheet= @creek.sheets[0] 
    @cop_log = {} 
    read_spreadsheet 
end