如何在对象初始化时调用方法?
问题描述:
而不是打电话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
答
的对象已经由时间initialize
存在被调用,它只是尚未初始化。因此,您可以调用initialize
中的方法,但在对象的其余部分已初始化后执行此操作,尤其是@sheet
。
def initialize(file)
@creek = Creek::Book.new file
@sheet= @creek.sheets[0]
@cop_log = {}
read_spreadsheet
end
read_spreadsheet
是self.read_spreadsheet
简写。 self
是被调用的对象initialize
(或任何其他方法)。在这种情况下,self
是您新创建的ChangeOrderLog
对象。
答
您可以调用其他方法内的方法,initialize
也不例外:
def initialize(file)
@creek = Creek::Book.new file
@sheet= @creek.sheets[0]
@cop_log = {}
read_spreadsheet
end
把它放在'initialize'中。 – Schwern