From: nobu@...
Date: 2018-01-23T14:02:06+00:00
Subject: [ruby-core:84993] [Ruby trunk Feature#5129] Create a core class "FileArray" and make "ARGF" its instance

Issue #5129 has been updated by nobu (Nobuyoshi Nakada).

Description updated

yimutang (Joey Zhou) wrote:
> For example, I want to mix two *groups* of files, not two files:

`FileGroup` ?

----------------------------------------
Feature #5129: Create a core class "FileArray" and make "ARGF" its instance
https://bugs.ruby-lang.org/issues/5129#change-69700

* Author: yimutang (Joey Zhou)
* Status: Assigned
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* 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:

```ruby
# 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:

```ruby
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
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>