ruby - 为什么我得到 Dir :Class in irb using Ruby 2. 6.3 的未定义方法 `mktmpdir'?

标签 ruby directory irb temp

https://ruby-doc.org/stdlib-2.6.3/libdoc/tmpdir/rdoc/Dir.html包含有关 Dir 类的 mktmpdir 方法的说明。

mktmpdir(prefix_suffix=nil, *rest)
::mktmpdir creates a temporary directory.

应用程序使用它没有错误,但为什么无法在控制台/irb 中运行它?

我也用 Dir.new ... 进行了测试,低于我对 Dir.mktmpdir 的尝试。

irb(main):010:0> Dir.mktmpdir {|dir| dir is ".../d..." }
Traceback (most recent call last):
        5: from C:/Ruby26/bin/irb.cmd:31:in `<main>'
        4: from C:/Ruby26/bin/irb.cmd:31:in `load'
        3: from C:/Ruby26/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        2: from (irb):10
        1: from (irb):10:in `rescue in irb_binding'
NoMethodError (undefined method `mktmpdir' for Dir:Class)

Dir.methods 没有显示这个方法,只有 mkdir。

分别缺少什么导致此行为的原因是什么?

最佳答案

您将标准库中的 tmpdir 添加到 Dir 类的补丁与核心中未打补丁的 Dir 类混淆了。如果您查看 tmpdir 包的文档:

https://ruby-doc.com/stdlib/libdoc/tmpdir/rdoc/Dir.html

然后你会在路径中找到Dir.mktmpdir(注意stdlib/libdoc/tmpdir)。但是,如果我们查看核心中的 Dir:

https://ruby-doc.org/core/Dir.html

您会找到所有常用的类方法(chdirchroot、...)但没有mktmpdir

如果你想使用mktmpdir,那么你必须require 'tmpdir':

Dir.method(:mktmpdir)
# NameError (undefined method `mktmpdir' for class `#<Class:Dir>')

require 'tmpdir'
Dir.method(:mktmpdir)
# #<Method: Dir.mktmpdir> 

关于ruby - 为什么我得到 Dir :Class in irb using Ruby 2. 6.3 的未定义方法 `mktmpdir'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58036493/

相关文章:

ruby-on-rails - rails 流

ruby - Ruby lib 的 JSON.load 和 JSON.parse 方法有什么区别?

algorithm - 存储用于流式传输的仅附加系列文件的最佳实践方法是什么?

ruby - IRB 中的哈希检查?

ruby-on-rails-3 - 显示长值/字符串后,rails 控制台 pry/irb "stuck"

ruby-on-rails - Rails 驱动器 Rest Api |使用google api客户端gem共享文件

ruby - 有没有人得到一个在 Windows 上工作的 ruby​​ memcached 客户端?

javascript - 使用 JavaScript API 在谷歌驱动器中创建文件夹

javascript - js 需要一个目录下的所有文件

java - 我怎样才能获得用于 Java 的交互式 shell(如 Ruby 的 irb)?