Il metodo Dir::glob
prende un argomento, e fornisce una matrice di tutti i file di directory e nidificati sotto l'argomento. (Da lì, è possibile prendere l'indice dell'array con [0]
.) L'argomento può includere un modello da abbinare, insieme a flag. L'argomento (pattern, flags) può essere opzioni simili (ma non esattamente) espressioni regolari.
Dalla documentazione, tra cui un paio di modelli/bandiere che possono essere di interesse per voi:
Nota che questo modello non è una regexp, è più vicino a un glob di shell. Vedi File.fnmatch
per il significato del parametro flags. Notare che la distinzione tra maiuscole e minuscole dipende dal sistema in uso (quindi File::FNM_CASEFOLD
viene ignorata), così come l'ordine in cui vengono restituiti i risultati.
*
- Corrisponde a qualsiasi file. Può essere limitato da altri valori nel glob. Equivalente a / .* /x
in regexp.
[set]
- Corrisponde a qualsiasi carattere nel set. Funziona esattamente come i set di caratteri in Regexp, inclusa la negazione dell'impostazione ([^a-z]
).
La scorciatoia di Dir::glob()
è Dir[]
, anche se io preferisco la forma a lungo. Come hai visto sopra, usare le parentesi denota uno schema/flag speciale per l'argomento. Ecco alcuni esempi (dalla documentazione) che possono meglio spiegare questo:
Dir["config.?"] #=> ["config.h"]
Dir.glob("config.?") #=> ["config.h"]
Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
Dir.glob("*") #=> ["config.h", "main.rb"]
E 'possibile per voi per ridefinire il metodo []
per Dir
, ma non voglio mostrare come - molti (e io) non lo fanno raccomandare classi e moduli Ruby core di patch-patch. Tuttavia, puoi creare il metodo in una classe personalizzata. Vedere la seguente:
class User
# Class method => User.new[arg]
def self.[](arg)
end
# Instance method => @user[arg]
def [](arg)
end
end
Sembra suo zucchero sintattico, un alias per 'Dir.glob ([string, ...], 0)' http://ruby-doc.org/core-2.2.0/Dir.html –
[Dir :: [\]] (http://ruby-doc.org/core-2.2.0/Dir.html#method-c- 5B-5D) è un metodo di varietà da giardino. Per definirlo sulla tua classe: 'classe A; def [] (altro); mette altro; fine; fine; A.new ['cat'] => "cat" '. –
per il tuo secondo punto -> http://stackoverflow.com/questions/13767240/ruby-how-to-make-a-public-static-method –