Verfahren Dir::glob
ein Argument nimmt, und bietet ein Array aller Verzeichnisse und Dateien unter dem Argument verschachtelt. (Von dort können Sie den Index des Arrays mit [0]
greifen.) Das Argument kann ein Muster enthalten, das mit Flags übereinstimmt. Das Argument (Muster, Flags) kann Optionen ähnlich (aber nicht genau) regulären Ausdrücken sein.
Aus den Dokumenten, einschließlich ein paar Muster/Flags, die für Sie von Interesse sein könnten:
Beachten Sie, dass dieses Muster kein regulärer Ausdruck ist, dann ist es näher an einen Shell-Glob. Siehe File.fnmatch
für die Bedeutung des Parameters flags. Beachten Sie, dass die Groß-/Kleinschreibung abhängig von Ihrem System ist (so wird File::FNM_CASEFOLD
ignoriert), ebenso wie die Reihenfolge, in der die Ergebnisse zurückgegeben werden.
*
- Für jede Datei. Kann durch andere Werte im Glob eingeschränkt werden. Entspricht / .* /x
in Regexp.
[set]
- Für jeden ein Zeichen gesetzt. Benimmt sich genau wie Zeichensätze in Regexp, einschließlich Satz Negation ([^a-z]
).
Der Kurz von Dir::glob()
ist Dir[]
, obwohl ich die lange Form bevorzugen. Wie Sie oben gesehen haben, kennzeichnet die Verwendung von Klammern ein spezielles Muster/Flag für das Argument. Hier sind einige Beispiele (aus der Dokumentation), die besser das erklären kann:
Dir["config.?"] #=> ["config.h"]
Dir.glob("config.?") #=> ["config.h"]
Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
Dir.glob("*") #=> ["config.h", "main.rb"]
Es ist Ihnen möglich, die []
Methode für Dir
neu zu definieren, aber ich will nicht zeigen, wie - viele (und ich) nicht empfehlen affe-patching core Ruby-Klassen und -Module. Sie können die Methode jedoch in einer eigenen Klasse erstellen. Sehen Sie im folgenden:
class User
# Class method => User.new[arg]
def self.[](arg)
end
# Instance method => @user[arg]
def [](arg)
end
end
wie seine nur syntaktischer Zucker Sieht aus, ein Alias für 'Dir.glob ([string, ...], 0)' http://ruby-doc.org/core-2.2.0/Dir.html –
[Dir :: [\]] (http://ruby-doc.org/core-2.0/Dir.html#method-c 5B-5D) ist eine Garten-Sorten-Methode. Um es in Ihrer eigenen Klasse zu definieren: 'Klasse A; def [] (andere); setzt andere; Ende; Ende; A.neu ['Katze'] => "Katze" '. –
für Ihren zweiten Punkt -> http://stackoverflow.com/questions/13767240/ruby-how-to-make-a-public-static-method –