为什么我使用 Ruby 2.6.3 在 irb 中得到 Dir:Class 的未定义方法“mktmpdir”?
Why do I get undefined method `mktmpdir' for Dir:Class in irb using Ruby 2.6.3?
https://ruby-doc.org/stdlib-2.6.3/libdoc/tmpdir/rdoc/Dir.html 包含有关 Dir class.
的 mktmpdir
方法的描述
mktmpdir(prefix_suffix=nil, *rest)
::mktmpdir creates a temporary directory.
我们有一个正在使用该应用程序但没有任何错误的应用程序,但为什么无法在控制台/irb 中 运行 它?为什么 hack 在控制台中不起作用?我也用 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
class 补丁与核心中未打补丁的 Dir
class 混淆了.如果您查看 tmpdir
包的文档:
然后你会在路径中找到 Dir.mktmpdir
(注意 stdlib/libdoc/tmpdir
)。但是如果我们在 core:
中查看 Dir
您会找到所有常用的 class 方法(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>
https://ruby-doc.org/stdlib-2.6.3/libdoc/tmpdir/rdoc/Dir.html 包含有关 Dir class.
的mktmpdir
方法的描述
mktmpdir(prefix_suffix=nil, *rest)
::mktmpdir creates a temporary directory.
我们有一个正在使用该应用程序但没有任何错误的应用程序,但为什么无法在控制台/irb 中 运行 它?为什么 hack 在控制台中不起作用?我也用 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
class 补丁与核心中未打补丁的 Dir
class 混淆了.如果您查看 tmpdir
包的文档:
然后你会在路径中找到 Dir.mktmpdir
(注意 stdlib/libdoc/tmpdir
)。但是如果我们在 core:
Dir
您会找到所有常用的 class 方法(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>