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
包的文档:
然后你会在路径中找到Dir.mktmpdir
(注意stdlib/libdoc/tmpdir
)。但是,如果我们查看核心中的 Dir
:
您会找到所有常用的类方法(chdir
、chroot
、...)但没有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/