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.