Ruby Academy · Oppitunti

Proc-oliot

Uudelleenkäytettävät lohko-oliot.

Oppitunti 2/413 vaihetta

Proc-oliot on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Uudelleenkäytettävät lohko-oliot

Lohko ei ole itsenäinen olio, joten sitä ei voi tallentaa muuttujaan. Proc käärii lohkon varsinaiseksi olioksi, jonka voitte tallentaa, välittää eteenpäin ja kutsua myöhemmin.

greeter = Proc.new { puts "Hello!" }
greeter.call
greeter.call

Proc-objektien luominen

Proc-objektin luomiseen on kaksi yleistä tapaa: Proc.new { ... } ja lyhyempi Kernel-metodi proc { ... }. Molemmat tuottavat samantyyppisen olion.

double = proc { |x| x * 2 }
p double.call(5)

Proc-objektin kutsuminen

Proc-objektin voi kutsua usealla tavalla: .call-syntaksilla, .()-syntaksilla tai hakasulkulyhenteellä [ ]. Ne ovat keskenään vastaavia.

square = proc { |x| x * x }
puts square.call(4)
puts square.(4)
puts square[4]

Proc-objektit hyväksyvät argumentteja

Proc-objektit hyväksyvät parametreja aivan kuten lohkotkin. Parametrit ilmoitetaan pystyviivojen välissä.

add = proc { |a, b| a + b }
puts add.call(3, 7)

Proc-objektien tallentaminen taulukoihin

Koska Proc-objektit ovat olioita, voitte säilyttää kokoelman toiminnallisuuksia ja suorittaa ne peräkkäin.

ops = [proc { |x| x + 1 }, proc { |x| x * 2 }]
result = 5
ops.each { |op| result = op.call(result) }
puts result

Proc-objektin välittäminen lohkona

Lisätkää Proc-objektin eteen &, kun haluatte välittää sen metodille, joka odottaa lohkoa. Ruby muuntaa sen takaisin lohkomuotoon.

printer = proc { |n| puts "Item: #{n}" }
[1, 2, 3].each(&printer)

Lohkojen kaappaaminen Proc-objekteiksi

Myös käänteinen muunnos toimii: metodin allekirjoituksessa oleva &block kaappaa annetun lohkon Proc-objektiksi, jonka voitte tallentaa.

def make_handler(&block)
  block
end
h = make_handler { |msg| puts "Got: #{msg}" }
h.call("ping")

Proc-objektit sallivat joustavan argumenttimäärän

Tärkeä ominaisuus on, että Proc-objektit eivät ilmoita väärästä argumenttimäärästä. Puuttuvien argumenttien arvoksi tulee nil, ja ylimääräiset argumentit ohitetaan.

p1 = proc { |a, b| puts "a=#{a.inspect} b=#{b.inspect}" }
p1.call(1)
p1.call(1, 2, 3)

Proc-objektit ja return

Proc-objektin sisällä oleva return palaa ympäröivästä metodista, ei pelkästään Proc-objektista. Tämä voi yllättää, joten toimikaa varovasti.

def demo
  p = proc { return 10 }
  p.call
  20  # never reached
end
puts demo

Proc-objektit kaappaavat ympäröivän kontekstin

Proc-objekti muistaa ne muuttujat, jotka olivat näkyvyysalueella sen määrittelykohdassa. Siksi se on sulkeuma, jota käsittelemme myöhemmin tarkemmin.

factor = 3
times_factor = proc { |n| n * factor }
puts times_factor.call(10)

Kootaan yhteen

Proc-objektit muuttavat lohkot ensiluokkaisiksi olioiksi:

  • Luo Proc-objekti käyttämällä proc { }- tai Proc.new-syntaksia.
  • Suorita se käyttämällä .call-, .()- tai [ ]-syntaksia.
  • Välitä se metodeille käyttämällä &-syntaksia.
  • Ne suhtautuvat argumenttimäärään joustavasti ja käyttävät metoditason return-käskyä.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts text

Pikatesti

Testatkaa, miten hyvin ymmärrätte Proc-objektit.

Kertaus

Opitte Proc-objekteista:

  • Proc on olioksi kääritty lohko.
  • Luo Proc käyttämällä proc- tai Proc.new-syntaksia ja suorita se käyttämällä .call-syntaksia.
  • Välitä Proc metodeille käyttämällä &-syntaksia.
  • Ne sallivat argumenttimäärän poikkeamat ja käyttävät metoditason return-käskyä.
shout = proc { |word| puts word.upcase }
shout.call("ruby")
Aloita maksutta

Opi Ruby tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
29
Oppitunnit
109

Usein kysytyt kysymykset

Onko oppitunti ”Proc-oliot” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Proc-oliot”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Proc-oliot”?

Uudelleenkäytettävät lohko-oliot. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Proc-oliot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?

Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Kertaus: lohkot
  2. Proc-oliot
  3. Lambda-funktiot
  4. Sulkeumat ja näkyvyysalue
← Takaisin: Ruby Academy