Proc-oliot
Uudelleenkäytettävät lohko-oliot.
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.callProc-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 resultProc-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 demoProc-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 { }- taiProc.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 textPikatesti
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- taiProc.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")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.