Ruby初始化:为什么它不执行我的读取指令

时间:2011-07-31 21:54:26

标签: ruby metaprogramming dsl

这是7周内7种编程语言的Ruby部分第3天的代码。如果我在m = RubyCsv.new

之后不写m.read,我就无法输出任何内容

初始化方法不应该处理吗?

要测试您可以使用包含

的简单rubycsv.txt文件
  

一,二

     
    

1,2

  

这是红宝石代码:

module ActsAsCsv

def self.included(base)
    base.extend ClassMethods
end

module ClassMethods
    def acts_as_csv
        include InstanceMethods
    end
end

module InstanceMethods
    def read
        @csv_contents = []
        filename = 'rubycsv.txt'
        file = File.new(filename)
        @headers = file.gets.chomp.split(', ')
        file.each do |row|
            @csv_contents << row.chomp.split(', ')
        end
    end

    attr_accessor :headers, :csv_contents

    def initalize
        read
    end
end
end

class RubyCsv
include ActsAsCsv
acts_as_csv 
end

m = RubyCsv.new
**m.read** #this shouldn't be necessary according to the book
puts m.headers.inspect
puts m.csv_contents.inspect

1 个答案:

答案 0 :(得分:2)

  

初始化方法不应该处理这个吗?

它应该。然而,你的方法被称为“初始化”。

另外:对于CSV使用现有的CSV库,并尝试使用File.open而不是File.new(这显示了用于打开文件的模式)。