Minnehåndtering i Ruby ordnes ved garbage collection, men en del andre ressurser krever eksplisitt lukking. Åpne filer, databasetilkoblinger og andre ressurser som tar opp mer enn minne, har det bedre med en eksplisitt lukking. Men slikt glemmer man lett...
1| # Hent filnavn fra kommandolinjen. 2| filnavn = ARGV[0] 3| 4| # Gamle måten. 5| fil = File.open( filnavn, "r" ) 6| linjenummer = 0 7| fil.readlines.each{ |linje| 8| linjenummer +=1 9| print "#{linjenummer}: #{linje}" 10| } 11| fil.close # Lukker filen eksplisitt 12| 13| # Bruk block til ressurs styring. 14| File.open( filnavn, "r") { |fil| 15| linjenummer = 0 16| fil.readlines.each{ |linje| 17| linjenummer += 1 18| print "#{linjenummer}>: #{linje}" 19| } 20| } 21| # File.open lukker filen etter å ha kjørt koden i blocken. |
Her benytter vi en annen måte for å angi blokker.
I stedet for do |arg| ... end
bruker vi {|arg| ... }
. Varianten med krøllparenteser har høyere presedens.