Ruby initialize: почему он не выполняет мою инструкцию по чтению - PullRequest
1 голос
/ 01 августа 2011

Это код 3-го дня раздела Ruby 7 языков программирования за 7 недель.Я не могу заставить его выводить что-либо, если я не пишу m.read сразу после m = RubyCsv.new

Разве метод инициализации не позаботится об этом?

Для проверки вы можете использовать простой файл 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 Ответ

2 голосов
/ 01 августа 2011

Разве метод инициализации не позаботится об этом?

Должен.Однако ваш метод называется «initalize».

Также: для CSV используйте существующие библиотеки CSV и попробуйте использовать File.open вместо File.new (это показывает режим, который вы используете для открытия файла).

...