Почему я получаю неопределенный метод mktmpdir для Dir: Class в irb, используя Ruby 2.6.3? - PullRequest
2 голосов
/ 21 сентября 2019

https://ruby -doc.org / stdlib-2.6.3 / libdoc / tmpdir / rdoc / Dir.html содержит описание метода mktmpdir класса Dir.

mktmpdir (prefix_suffix = nil, * rest)
:: mktmpdir создает временный каталог.

У нас есть приложение, которое использует эту ошибку без какой-либо ошибки, но почемуне возможно запустить его в консоли / 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.Почему это часть документации и как она работает?

Чего не хватает, соответственно, в чем причина такого поведения?

1 Ответ

3 голосов
/ 21 сентября 2019

Вы путаете патчи с классом Dir, который tmpdir в стандартной библиотеке добавляет с простым непатченным классом 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

you 'я найду все обычные методы класса (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> 
...