11. Andere zaken
11.1 Wat heeft a ? b : c
te betekenen?
Ditis hetzefde als zeggen if a then b else c end
.
11.2 Hoe tel ik het aantal regels in een bestand?
Ervan uitgaand dat het bestand eindigd met een linefeed, is de volgende code het snelst:
open("example").read.count("\n") # -> 3 |
11.3 Wat geven begin
and end
van MatchingData terug?
Ze werken samen met $ , en geven de start index en de end index van de gematchte gevens ($0) in de oorspronkelijke string. Zie voor een voorbeeld tab expansion.
11.4 How totaliseer ik de elementen van een array?
In plaats van een specifieke vraag op te lossen is het beter het
algemene probleem aan te pakken. Het eerste wat we doen is een methode
maken die over een Enumerable
object itereerd en
een
enkel resultaat teruggeeft. Smalltalk noemt deze methode inject
,
dus wij ook:
module Enumerable |
Merk op de we de methode hebben toegevoegd aan Enumerable
.
Dit betekend dat alles wat Enumerable
als mixin gebruikt
ook inject kan gebruiken. Maar hoe gebruiken we het? Het vraagt een
enkelvoudig argument `n' en een block. Voor ieder element in het
ge-enumereerde object roept de methode het block aan met `n' en het
element als argument. Het resultaat van het block wordt toegekend aan
`n'. Dus om sum
, te definieeren schrijven we:
module Enumerable |
11.5 Hoe gebruik ik continueringen?
Ruby's continueringen zijn objecten die een plaats in een Ruby programma uitdrukken en zij maken het mogelijk om naar die plaats terug te keren (zelfs als die plek ogenschijnlijk niet meer in scope is). Continueringen kunnen gebruikt worden om complexe controle structuren te implementeren, maar zijn over her algemeen beter bruikbaar als middel om mensen in verwarring te brengen.
In [ruby-talk:4482], geeft Jim Weirich het volgende voorbeeld van continueringen:
# -------------------------------------------------------------------- |
# -------------------------------------------------------------------- |
# -------------------------------------------------------------------- |