为什么我不能将“mkdir”与Pathname对象一起使用?

时间:2010-01-20 11:54:41

标签: ruby

我最近一直在试用Pathname lib,我想做的一件事是使用mkdir来创建一些目录。

我查看了文档,它说它包裹了mkdir,但每次我尝试使用它时都会收到此错误:

irb(main):006:0> p = Pathname.new('/tmp')
=> #<Pathname:/tmp>
irb(main):007:0> a = p.mkdir("123adam")
TypeError: can't convert String into Integer
  from /usr/lib/ruby/1.8/pathname.rb:975:in `mkdir'
  from /usr/lib/ruby/1.8/pathname.rb:975:in `mkdir'
  from (irb):7
  from /usr/lib/ruby/1.8/fileutils.rb:1589

任何人都可以解释我在这里做错了什么。

2 个答案:

答案 0 :(得分:7)

您需要使用Pathname指定要创建的目录,然后调用mkdir

这应该有效:

p = Pathname.new('/tmp/123adam')
p.mkdir

您可以提供的参数是新目录的权限。

答案 1 :(得分:2)

出于兴趣,你得到“无法将字符串转换为整数”的原因是因为Pathname.mkdir实际上是Dir.mkdir的包装,如下所示:

def mkdir(*args) Dir.mkdir(@path, *args) end

Pathname对象表示的路径作为第一个参数传递给Dir.mkdir,然后传递给Pathname.mkdir的任何参数。 Dir.mkdir的第二个参数是您希望创建目录的数字访问权限。因此,在您的示例中,"123adam"传递给Dir.mkdir,其中包含一个数字。