Proc
Oggetti blocco riutilizzabili
Proc è una lezione Ruby Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Ruby Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ruby Academy include 4 lezioni in totale.
Oggetti blocco riutilizzabili
Un blocco non è di per sé un oggetto, quindi non è possibile salvarlo in una variabile. Un Proc racchiude un blocco in un vero oggetto che è possibile salvare, passare ad altri metodi e chiamare in seguito.
greeter = Proc.new { puts "Hello!" }
greeter.call
greeter.callCreare Proc
Esistono due modi comuni per creare un Proc: Proc.new { ... } e il metodo Kernel più breve proc { ... }. Entrambi producono lo stesso tipo di oggetto.
double = proc { |x| x * 2 }
p double.call(5)Chiamare un Proc
È possibile invocare un Proc in diversi modi: .call, .() e la scorciatoia con parentesi quadre [ ]. Sono equivalenti.
square = proc { |x| x * x }
puts square.call(4)
puts square.(4)
puts square[4]I Proc accettano parametri
I Proc accettano parametri proprio come i blocchi, dichiarati tra le barre verticali.
add = proc { |a, b| a + b }
puts add.call(3, 7)Salvare Proc negli array
Poiché i Proc sono oggetti, è possibile conservare una raccolta di comportamenti ed eseguirli in successione.
ops = [proc { |x| x + 1 }, proc { |x| x * 2 }]
result = 5
ops.each { |op| result = op.call(result) }
puts resultPassare un Proc come blocco
Anteporre & a un Proc permette di passarlo a un metodo che si aspetta un blocco. Ruby lo riconverte nel formato di blocco.
printer = proc { |n| puts "Item: #{n}" }
[1, 2, 3].each(&printer)Catturare blocchi come Proc
Funziona anche al contrario: &block nella firma di un metodo cattura il blocco fornito come Proc, che è possibile salvare.
def make_handler(&block)
block
end
h = make_handler { |msg| puts "Got: #{msg}" }
h.call("ping")I Proc tollerano le arità
Una caratteristica importante: i Proc non segnalano errori quando il numero di argomenti non è corretto. Gli argomenti mancanti diventano nil e quelli in eccesso vengono ignorati.
p1 = proc { |a, b| puts "a=#{a.inspect} b=#{b.inspect}" }
p1.call(1)
p1.call(1, 2, 3)Proc e return
Un return all'interno di un Proc esce dal metodo circostante, non solo dal Proc. Questo può sorprendere, quindi presti attenzione.
def demo
p = proc { return 10 }
p.call
20 # never reached
end
puts demoI Proc catturano il contesto circostante
Un Proc ricorda le variabili nell'ambito in cui è stato definito. Questo lo rende una closure, un argomento che approfondiremo più avanti.
factor = 3
times_factor = proc { |n| n * factor }
puts times_factor.call(10)Mettere tutto insieme
I Proc trasformano i blocchi in oggetti di prima classe:
- Si creano con
proc { }oProc.new. - Si eseguono con
.call,.()o[ ]. - Si passano ai metodi con
&. - Tollerano le differenze di arità e usano il
returna livello di metodo.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts textVerifica rapida
Verifichi la comprensione dei Proc.
Riepilogo
Ha imparato a usare i Proc:
- Un Proc è un blocco racchiuso in un oggetto.
- Si crea con
proc/Proc.newe si esegue con.call. - Si passa ai metodi usando
&. - Tollera le differenze di arità e usa il
returna livello di metodo.
shout = proc { |word| puts word.upcase }
shout.call("ruby")Domande Frequenti
La lezione «Proc» è gratuita?
Sì — il testo completo di «Proc» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Ruby Academy, passa a CoddyKit PRO. Il corso Ruby Academy include 4 lezioni in totale.
Cosa imparerò in «Proc»?
Oggetti blocco riutilizzabili Eserciti Ruby Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Ruby Academy?
Non è richiesta alcuna esperienza precedente. Ruby Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Proc»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Ruby Academy?
Sì. Ogni lezione Ruby Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.