Project

General

Profile

Feature #19734

Updated by sawa (Tsuyoshi Sawada) 11 months ago

I propose to let `File` class be a subclass of `Dir` singleton methods be available to `File` in some way. class. Motivations are as follows. 

 When we want to do something with a file (for example `File.read` or `File.write`), we quite often want to achieve the home directory. If we are in the mode of thinking in the ream of `File`, we would likely come up with `File.expand_path("~")`. However, this is cumbersome, and actually, `Dir.home` is simpler. But my experience is that switching the mind to `Dir` when thinking about `File` require extra cognitive load. 

 Also, many methods defined in `File` work for both a file or a directory. When we are doing something with a directory, we have to stop and think whether the method we want to use is defined in `File` or in `Dir`. It is possible to do that, but that also requires extra cognitive load. 

 I thought things would become simpler if we do not need to switch between these two classes in mind, and keep using `File`. There are a few singleton methods that are defined on both `File` and `Dir`: 

 ``` 
 delete/unlink, empty?, exist?, new/open 
 ``` 

 For them, perhaps some modification can but I think there would be made. no problem in choosing the appropriate class depending on the need. 

 Semantically, maybe it makes more sense to let `Dir` be a subclass of `File` because directories are special cases of files. However, in Ruby, `File` and `Dir` have ancestors 

 ``` 
 File < IO < Enumerable < File::Constants < Object < ... 
 Dir < Enumerable < Object < ... 
 ``` 

 respectively, and `File` inherits `IO` and `File::Constants`, beside their common ancestors, so I though that letting `File` be a subclass of `Dir` would be more practical.

Back