需要 ruby 个宝石,结果不一
Requiring ruby gems giving mixed results
今天发现运行require fileutils
在撬总是returns假。但是,如果我在 irb 中做同样的事情,它 returns 是正确的。此外,当 fileutils 设置为 false 时,它仍然有效!
首先我认为 fileutils 是 pry 的依赖项,这可以解释为什么它已经是必需的。但事实并非如此。我是否遗漏了一些基本知识?
[07:40] ~/Desktop $ gem dependency pry
Gem pry-0.10.2
bundler (~> 1.0, development)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
Gem pry-theme-1.1.3
bundler (~> 1.0, development)
coderay (~> 1.1)
json (~> 1.8)
示例:
首先我用撬来制作一些文件夹。 fileutils 是否已加载?请注意,即使 fileutils returns false 它仍然有效:
[07:44] ~/Desktop $ ls
[07:44] ~/Desktop $ ########## (nothing)
[07:44] ~/Desktop $ pry
[1] pry(main)> require 'fileutils'
=> false
[2] pry(main)> FileUtils::mkdir_p 'foo'
=> ["foo"]
[3] pry(main)> Dir.mkdir('bar')
=> 0
[4] pry(main)> Dir["/home/caveman/Desktop/*"]
=> ["/home/caveman/Desktop/foo", "/home/caveman/Desktop/bar"]
我删除了刚刚创建的文件夹...
[07:48] ~/Desktop $ rm -r *
[07:48] ~/Desktop $ ls
[07:48] ~/Desktop $ ########## (nothing again)
现在我用 irb 再试一次:
[07:49] ~/Desktop $ irb
irb(main):001:0> require 'fileutils'
=> true
irb(main):002:0> FileUtils::mkdir_p 'foo2'
=> ["foo2"]
irb(main):003:0> Dir.mkdir 'bar2'
=> 0
irb(main):004:0> Dir["/home/caveman/Desktop/*"]
=> ["/home/caveman/Desktop/bar2", "/home/caveman/Desktop/foo2"]
这让我大吃一惊。即使我在 irb 中将 'fileutils' 设置为 false,它仍然有效:
irb(main):005:0> require 'fileutils'
=> false
irb(main):006:0> FileUtils::mkdir_p 'foo3'
=> ["foo3"]
irb(main):007:0> Dir["/home/caveman/Desktop/*"]
=> ["/home/caveman/Desktop/foo3", "/home/caveman/Desktop/bar2", "/home/caveman/Desktop/foo2"]
首先,FileUtils 不是 gem,因此它永远不会显示为 gem 依赖项。
其次,require
的return值并没有告诉你请求是否成功(如果失败,它会引发异常)。 false
表示它已经加载。你的陈述
Even after I set 'fileutils' to false in irb
没有意义。你根本没有设置任何东西,你只是再次调用 require
并且第二次调用 returns false。
您所观察到的只是意味着 pry(或其依赖项之一)直接加载 FileUtils 或加载一些加载 FileUtils 的标准库。看起来 pry 需要 'tempfile',它本身需要 'tmpdir',而后者又需要 'fileutils'。
今天发现运行require fileutils
在撬总是returns假。但是,如果我在 irb 中做同样的事情,它 returns 是正确的。此外,当 fileutils 设置为 false 时,它仍然有效!
首先我认为 fileutils 是 pry 的依赖项,这可以解释为什么它已经是必需的。但事实并非如此。我是否遗漏了一些基本知识?
[07:40] ~/Desktop $ gem dependency pry
Gem pry-0.10.2
bundler (~> 1.0, development)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
Gem pry-theme-1.1.3
bundler (~> 1.0, development)
coderay (~> 1.1)
json (~> 1.8)
示例:
首先我用撬来制作一些文件夹。 fileutils 是否已加载?请注意,即使 fileutils returns false 它仍然有效:
[07:44] ~/Desktop $ ls
[07:44] ~/Desktop $ ########## (nothing)
[07:44] ~/Desktop $ pry
[1] pry(main)> require 'fileutils'
=> false
[2] pry(main)> FileUtils::mkdir_p 'foo'
=> ["foo"]
[3] pry(main)> Dir.mkdir('bar')
=> 0
[4] pry(main)> Dir["/home/caveman/Desktop/*"]
=> ["/home/caveman/Desktop/foo", "/home/caveman/Desktop/bar"]
我删除了刚刚创建的文件夹...
[07:48] ~/Desktop $ rm -r *
[07:48] ~/Desktop $ ls
[07:48] ~/Desktop $ ########## (nothing again)
现在我用 irb 再试一次:
[07:49] ~/Desktop $ irb
irb(main):001:0> require 'fileutils'
=> true
irb(main):002:0> FileUtils::mkdir_p 'foo2'
=> ["foo2"]
irb(main):003:0> Dir.mkdir 'bar2'
=> 0
irb(main):004:0> Dir["/home/caveman/Desktop/*"]
=> ["/home/caveman/Desktop/bar2", "/home/caveman/Desktop/foo2"]
这让我大吃一惊。即使我在 irb 中将 'fileutils' 设置为 false,它仍然有效:
irb(main):005:0> require 'fileutils'
=> false
irb(main):006:0> FileUtils::mkdir_p 'foo3'
=> ["foo3"]
irb(main):007:0> Dir["/home/caveman/Desktop/*"]
=> ["/home/caveman/Desktop/foo3", "/home/caveman/Desktop/bar2", "/home/caveman/Desktop/foo2"]
首先,FileUtils 不是 gem,因此它永远不会显示为 gem 依赖项。
其次,require
的return值并没有告诉你请求是否成功(如果失败,它会引发异常)。 false
表示它已经加载。你的陈述
Even after I set 'fileutils' to false in irb
没有意义。你根本没有设置任何东西,你只是再次调用 require
并且第二次调用 returns false。
您所观察到的只是意味着 pry(或其依赖项之一)直接加载 FileUtils 或加载一些加载 FileUtils 的标准库。看起来 pry 需要 'tempfile',它本身需要 'tmpdir',而后者又需要 'fileutils'。