Project

General

Profile

Actions

Feature #19734

closed

Let `Dir` methods be available to `File`

Added by sawa (Tsuyoshi Sawada) 10 months ago. Updated 10 months ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:113925]

Description

I propose to let Dir singleton methods be available to File in some way. 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 be made.

Actions #1

Updated by sawa (Tsuyoshi Sawada) 10 months ago

  • Subject changed from Let `File` be a subclass of `Dir` to Let `Dir` methods be available to `File`
  • Description updated (diff)

Updated by matz (Yukihiro Matsumoto) 10 months ago

  • Status changed from Open to Rejected

I am negative for several reasons.

  • IO (File) and Dir have different role and implementation in Unix, which Ruby design based on
  • In Ruby, we cannot have multiple class parents, case for your proposal, File's super class must be either IO or Dir
  • Last but not least, according to your proposal, we will have a “File is a Dir” relationship, which is unacceptably strange (at least from my point of view).

To reduce (your) cognitive load, we might be able to add some (class) methods, without making a new inheritance relationship.

Matz.

Actions

Also available in: Atom PDF

Like0
Like0Like0