[ruby-core:113925] [Ruby master Feature#19734] Let `File` be a subclass of `Dir`
From:
"sawa (Tsuyoshi Sawada) via ruby-core" <ruby-core@...>
Date:
2023-06-17 14:53:52 UTC
List:
ruby-core #113925
Issue #19734 has been reported by sawa (Tsuyoshi Sawada).
----------------------------------------
Feature #19734: Let `File` be a subclass of `Dir`
https://bugs.ruby-lang.org/issues/19734
* Author: sawa (Tsuyoshi Sawada)
* Status: Open
* Priority: Normal
----------------------------------------
I propose to let `File` class be a subclass of `Dir` 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
```
but I think there would be 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.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/