在ruby-doc中,
我认为这两个条目都不正确。这两个方法似乎都是在
File::exist?
和 File::exists?
的文档条目是重复的,但它们使用不同的语义:一个条目表示如果 file_name
是一个目录,则返回true
; 另一个条目表示如果 file_name
是一个文件,则返回true
。我认为这两个条目都不正确。这两个方法似乎都是在
file.c
中使用 rb_file_exist_p
实现的,它似乎会尝试调用fstat()
(如果传递的值是 IO)或stat()
(如果它是字符串)。 fstat()
和 stat()
在成功时返回0
,错误时返回-1
,并将此传递回 rb_file_exist_p
,然后转换为布尔结果。 我觉得:
- 有两种使代码更易读的方法;没有语义上的区别。
- 两者都不关心文件是否存在,而是关心类似于文件的对象是否存在,例如文件、目录、套接字、FIFO 等。
- 也许文档可以说明这些方法告诉调用者是否存在具有类似文件的语义的对象,但更具体的测试将表明它实际上是什么类型:例如目录(directory?),文件(file?),套接字(socket?)等。