Ringen

Een interessante draai aan standaard lijsten zijn ringen. Als u wat programmeren weet, ben je misschien al ring buffers of ring array’s tegengekomen. Hier gaan we gewoon voor ring - het is kort en simpel.

In de vorige sectie over lijsten zagen we al hoe we elementen door het indexeer mechanisme uit hen konden halen:

puts [52, 55, 59][1]

War gebeurd er nu als je 100 wil indexeren? Wel er is duidelijk geen element bij index 100 daar de lijst enkel drie elementen bevat. Dus Sonic Pi zal nil weergeven, wat niets betekent.

Stel nu even dat je een teller hebt en dat deze jouw huidige beat is die in snelheid toeneemt. Lat ons deze teller en lijst aanmaken:

counter = 0
notes = [52, 55, 59]

We kunnen nu onze teller gebruiken om toegang te krijgen tot een noot in onze lijst:

puts notes[counter]

Geweldig, we hebben 52. Nu, laten we onze teller verhogen en krijg een andere noot:

counter = (inc counter)
puts notes[counter]

Super, we krijgen nu 55 en als wij het opnieuw doen krijgen we 59. Als wij het nogmaals doen, raken onze cijfer op in onze lijst en krijgen we nil. Wat als we bij het begin van de lijst weer willen beginnen? Dit is wat waar ringen voor zijn.

Ringen maken

We kunnen ringen op twee manieren maken. We kunnen de ring functie gebruiken met de elementen van de ring als parameters:

(ring 52, 55, 59)

Of we kunnen een normale lijst nemen en deze naar een ring omzetten door naar deze een .ring bericht te zenden :

[52, 55, 59].ring

Ringen Indexeren

Eens we een ring hebben, kan je deze op exact de zelfde manier als gewone lijsten gebruiken met uitzondering dat je indexen kunt gebruiken die negatief zijn of groter dan de grootte van de ring, en altijd naar één van de elementen van de ring zullen omslaan:

(ring 52, 55, 59)[0] #=> 52
(ring 52, 55, 59)[1] #=> 55
(ring 52, 55, 59)[2] #=> 59
(ring 52, 55, 59)[3] #=> 52
(ring 52, 55, 59)[-1] #=> 59

Ringen Gebruiken

Laten we zeggen dat we een variabele gebruiken om het nummer van de huidige beat te vertegenwoordigen. We kunnen dit als een index in onze ring gebruiken om noten te halen om te spelen of release tijden of alles wat nuttig zou kunnen zijn en we hebben opgeslagen in onze ring ongeacht het beat nummer dat we momenteel hebben.

Toonladders en Akkoorden zijn ringen

Handig om weten is dat de lijsten door scale en de chord opgeroepen, ook ringen zijn en jou toelaten willekeurige indexen te openen.

Ring Bouwers

Naast de ring zijn er een aantal andere functies die een ring voor ons zullen bouwen.

Neem een kijkje naar hun respectievelijke documentatie voor meer informatie hierover.