[]如何在Ruby中的类上工作

Pra*_*man 5 ruby class

我看到我可以使用获取目录中的文件列表

Dir["*"]
Run Code Online (Sandbox Code Playgroud)

我该怎么读这个语法呢?据我所知,您可以使用[]从数组或哈希中获取值.

[]如何处理通话?

art*_*yan 5

[]只是一个方法,比如#to_s,#object_id.等等

您可以在任何对象上定义它:

class CoolClass
  def [](v)
    puts "hello #{v}"
  end
end

CoolClass.new["John"] # => "hello John"
Run Code Online (Sandbox Code Playgroud)

在您的情况下,它以这种方式定义为单例方法:

class Dir
  def self.[](v)
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)


Par*_*ker 4

从Ruby 文档来看,Dir["*"]相当于Dir.glob(["*"]). (正如所指出的,它是语法糖)

Dir不是一个调用,它是一个类,其对象class Dir是目录流,您可以像数组一样访问它。

在您的特定情况下,Dir["*"]将返回array从作为 传递的模式中找到的文件名Dir[patternString]。"*"因为模式将匹配零个或多个字符,换句话说,它将匹配所有内容,因此将返回array该目录中的所有文件名。

对于第二个问题,您可以将其定义为任何其他方法,如下所示:

class YourClass
  def self.[](v)
    #your code here
  end
end
Run Code Online (Sandbox Code Playgroud)