Next Previous Contents

23. <3.3.2.1>: Blokker for håndtering av ressurser

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.


Next Previous Contents