为什么我为File:Class获得"未定义的方法"?

Klo*_*tho 2 ruby

我刚刚在我的Ubuntu机器上安装了Ruby,并且这样做了:

$ ruby --version
ruby 1.9.3p0 (2011-10-30 revision 33570) [i686-linux]

$ ruby
p File.basename("foo")
p File.exist("foo")
"foo"
-:2:in `<main>': undefined method `exist' for File:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

我读的方式文件文档页面,应该不是这个工作?

Jas*_* FB 51

从Ruby 3.2.0开始,exists?(复数)别名似乎exist?已被删除。

对于Ruby 3.2.0,请务必使用单数形式exist?

% rvm use 3.1.3
Using /Users/jason/.rvm/gems/ruby-3.1.3
jason@MBA22.local /Users/jason/Work/Hot_Glue/Example Apps/AltLookup1 [main]
% irb  
3.1.3 :001 > File.exist?("xyz")
 => false 
3.1.3 :002 > File.exists?("xyz")
 => false 
3.1.3 :003 > exit
jason@MBA22.local /Users/jason/Work/Hot_Glue/Example Apps/AltLookup1 [main]
% rvm use 3.2.0
Using /Users/jason/.rvm/gems/ruby-3.2.0
jason@MBA22.local /Users/jason/Work/Hot_Glue/Example Apps/AltLookup1 [main]
% irb
3.2.0 :001 > File.exist?("xyz")
 => false 
3.2.0 :002 > File.exists?("xyz")
(irb):2:in `<main>': undefined method `exists?' for File:Class (NoMethodError)
Did you mean?  exist?                             
        from /Users/jason/.rvm/rubies/ruby-3.2.0/lib/ruby/gems/3.2.0/gems/irb-1.6.2/exe/irb:11:in `<top (required)>'
        from /Users/jason/.rvm/rubies/ruby-3.2.0/bin/irb:25:in `load'
        from /Users/jason/.rvm/rubies/ruby-3.2.0/bin/irb:25:in `<main>'

Run Code Online (Sandbox Code Playgroud)

  • “File.exists?” 早在 Ruby 2.1 中就已被弃用,但至今仍保留在该语言中数年。您可以在发行说明中找到所有已删除的功能,https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/向下滚动到“已删除”常量”和“删除的方法” (5认同)
  • Ruby 作者是否破坏了其他无辜且标准的东西? (4认同)

Mat*_*ira 8

?在最后忘记了问号():

File.exist? 'foo'
File.exists? 'foo'
Run Code Online (Sandbox Code Playgroud)

一般来说,回答问题的方法总是以问号结束.

在这种情况下,该方法是问File这个does 'foo' exist?问题.该课程将返回答案.