Procs
Genbrugelige block-objekter
Procs er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.
Genanvendelige blokobjekter
En blok er ikke i sig selv et objekt, så du kan ikke gemme den i en variabel. En Proc omslutter en blok som et rigtigt objekt, du kan gemme, sende videre og kalde senere.
greeter = Proc.new { puts "Hello!" }
greeter.call
greeter.callOprette Procs
To almindelige måder at oprette en Proc på er Proc.new { ... } og den kortere Kernel-metode proc { ... }. Begge opretter den samme type objekt.
double = proc { |x| x * 2 }
p double.call(5)Kalde en Proc
Du kan kalde en Proc på flere måder: .call, .() og kortformen med firkantede parenteser [ ]. De er ækvivalente.
square = proc { |x| x * x }
puts square.call(4)
puts square.(4)
puts square[4]Procs tager argumenter
Procs accepterer parametre ligesom blokke, angivet mellem de lodrette streger.
add = proc { |a, b| a + b }
puts add.call(3, 7)Gemme Procs i arrays
Fordi Procs er objekter, kan du opbevare en samling af adfærd og køre dem efter tur.
ops = [proc { |x| x + 1 }, proc { |x| x * 2 }]
result = 5
ops.each { |op| result = op.call(result) }
puts resultVideregive en Proc som en blok
Sæt & foran en Proc for at give den til en metode, der forventer en blok. Ruby pakker den ud til blokform igen.
printer = proc { |n| puts "Item: #{n}" }
[1, 2, 3].each(&printer)Indfange blokke som Procs
Det omvendte virker også: &block i en metodsignatur indfanger den angivne blok som en Proc, du kan gemme.
def make_handler(&block)
block
end
h = make_handler { |msg| puts "Got: #{msg}" }
h.call("ping")Procs er fleksible med hensyn til aritet
En vigtig egenskab er, at Procs ikke klager over et forkert antal argumenter. Manglende argumenter bliver til nil, og ekstra argumenter ignoreres.
p1 = proc { |a, b| puts "a=#{a.inspect} b=#{b.inspect}" }
p1.call(1)
p1.call(1, 2, 3)Procs og return
En return i en Proc vender tilbage fra den omgivende metode, ikke kun fra Proc-objektet. Det kan overraske dig, så vær forsigtig.
def demo
p = proc { return 10 }
p.call
20 # never reached
end
puts demoProcs indfanger deres omgivelser
En Proc husker variablerne i det område, hvor den blev defineret. Det gør den til en lukning, et emne vi udforsker nærmere senere.
factor = 3
times_factor = proc { |n| n * factor }
puts times_factor.call(10)Sæt det hele sammen
Procs gør blokke til førsteklasses objekter:
- Opret med
proc { }ellerProc.new. - Kør med
.call,.()eller[ ]. - Videregiv til metoder med
&. - De er fleksible med hensyn til aritet og bruger metodens
return.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts textHurtigt tjek
Afprøv din forståelse af Procs.
Opsamling
Du har lært om Procs:
- En Proc er en blok omsluttet som et objekt.
- Opret med
proc/Proc.new, og kør med.call. - Videregiv til metoder ved hjælp af
&. - De tåler forskelle i aritet og bruger metodens
return.
shout = proc { |word| puts word.upcase }
shout.call("ruby")Lær Ruby med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 109
Ofte stillede spørgsmål
Er lektionen “Procs” gratis?
Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “Procs”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Procs”?
Genbrugelige block-objekter Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Ruby Academy?
Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Procs”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Ruby Academy-lektion?
Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.