Le estensioni per gli Array sono probabilmente le più interessanti, insieme a quelle per Hash, Object, Module e Kernel. Vediamo alcuni esempi.
Ruby mette a disposizione i metodi Array#first e Array#last per accedere rapidamente al primo ed ultimo elemento di un array. ActiveSupport introduce and Array#second, Array#third, Array#fourth e Array#fifth.
Esiste anche il metodo Array#forty_two, con probabili riferimenti alla famosa risposta.
require '../helper' colors = %w(red yellow green blue) colors.first# => red colors.second # => yellow colors.third# => green colors.fourth # => blue
Inoltre, i metodi Array#from e Array#to consentono di accedere agilmente a dei sottoinsiemi dell'array originale.
require '../helper' colors = %w(red yellow green blue black white) colors.from(3)# => ['blue', 'black', 'white'] colors.to(3) # => ['red', 'yellow', 'green'] colors.from(2).to(1) # => ['green', 'blue']
Questi due metodi potrebbero tornare molto utili. Ipotizziamo di avere un array di oggetti Post di un blog e di voler mostrare un layout completo per il primo e solo delle headlines per i rimanenti. Ecco una soluzione
elegante.
require '../helper'
class Post < Struct.new(:id, :title, :content)
end
posts = (1..10).collect do |index|
Post.new( index, "Title post #{index}", "This is the content for post #{index}.")
end
# mostra i post se l'array non è vuoto
if post = posts.first
puts "<h2>#{post.id}. #{post.title}</h2>"
puts "<p>#{post.content}.</p>"
# mostra headline
puts "<ol>"
posts.from(2).each do |post|
puts "<li>#{post.title}</li>"
end
puts "</ol>"
end
Tra le estensioni dedicate alla conversione la più interessante è Array#to_query, decisamente utile per chi ha necessità di lavorare con URL e query string. Array#rand permette di
estrarre random un elemento dall'array. Si tratta di semplici utility ma è estremamente formativo andare a curiosare l'implementazione di questi metodi per migliorare la propria conoscenza di Ruby.
# Definizione del metodo Array#rand
def rand
self[Kernel.rand(length)]
end
Forse il metodo più interessante è Array#extract_options!. Questo metodo è largamento diffuso in Rails in tutti quei metodi che accettano illimitati parametri ed una serie di
parametri opzionali passati per keyword. Un esempio sono i validatori.
validate_presence_of :attr1, :attr2 validate_presence_of :attr1, :attr2 validate_presence_of :attr1, :attr2, :option1 => true, :options2 => 'foo'
Questo metodo chiamato sull'array parametro separa gli argomenti dalle opzioni. Ecco alcuni esempi tipici di utilizzo.
require '../helper'
def print_params(*args)
puts "params: " + args.inspect
options = args.extract_options!
puts "args: " + args.inspect
puts "options: " + options.inspect
end
print_params :attr1, :attr2
# => params: [:attr1, :attr2]
# => args:[:attr1, :attr2]
# => options: {}
print_params :attr1, :attr2
# => params: [:attr1, :attr2]
# => args:[:attr1, :attr2]
# => options: {}
print_params :attr1, :attr2, :option1 => true, :options2 => 'foo'
# => params: [:attr1, :attr2, {:options2=>"foo", :option1=>true}]
# => args:[:attr1, :attr2]
# => options: {:options2=>"foo", :option1=>true}
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: