From: "mame (Yusuke Endoh)" Date: 2012-03-27T01:55:38+09:00 Subject: [ruby-core:43698] [ruby-trunk - Feature #5129][Assigned] Create a core class "FileArray" and make "ARGF" its instance Issue #5129 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to matz (Yukihiro Matsumoto) Hello, I like the idea, but it requires matz's approval. > Now when I "p ARGF.class", I get "ARGF.class", so ARGF is an instance of ARGF.class, how meaningless it is. FYI: In fact, it is meaningful. You can "exploit" it. $ cat a.txt foo $ cat b.txt bar $ ruby -e 'p ARGF.class.new("a.txt", "b.txt").read' "foo\nbar\n" I'm not sure if this behavior is the spec, though. -- Yusuke Endoh ---------------------------------------- Feature #5129: Create a core class "FileArray" and make "ARGF" its instance https://bugs.ruby-lang.org/issues/5129#change-25198 Author: yimutang (Joey Zhou) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: Target version: I suggest to create a class "FileArray" whose instance behaves just like ARGF do. And I think ARGF should be an instance of FileArray. Now when I "p ARGF.class", I get "ARGF.class", so ARGF is an instance of ARGF.class, how meaningless it is. FileArray methods: # create an instance fa = FileArray.new('a.txt','b.txt','c.txt') # take many methods from IO # most methods from ARGF should be instance methods of ARGF fa.each {|line| puts line } fa.realines fa.filename # current file # but "argv" not p fa.file_list # in ARGF, its ARGF.argv, but #argv is not a proper name for FileArray # ARGV array can be modified, adding new file into it, all replace to a new file list. # FileArray should add some methods to modify the inner file list. fa.insert(3,"d.txt") fa.delete('a.txt') With FileArray, You can create multiple ARGF-like file arrays simultaneously. For example, I want to mix two *groups* of files, not two files: a_files = FileArray.new(*Dir.glob('a*.txt')) b_files = FileArray.new(*Dir.glob('b*.txt')) enum_a = a_files.each enum_b = b_files.each loop do puts enum_a.next puts enum_b.next end -- http://bugs.ruby-lang.org/