Ruby Academy · Lektion

Procs

Genbrugelige block-objekter

Lektion 2 af 413 trin

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.call

Oprette 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 result

Videregive 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 demo

Procs 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 { } eller Proc.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 text

Hurtigt 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")
Gratis at komme i gang

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.

Alle lektioner i dette kursus

  1. Opsamling på blocks
  2. Procs
  3. Lambdas
  4. Closures og scope
← Tilbage til Ruby Academy