Ruby lar deg ikke få tak i et objekts attributter (felter, dataverdier, instansvariable) direkte. Alle attributter er "private". Enhver tilgang fra utsiden til objektet går via metodekall, såkalte get/set metoder.
Instansvariable er "private" på en måte som er mer som protected i andre språk; metoder i sub- og superklasser har tilgang. Men andre instanser har ikke tilgang, selv ikke instanser av samme klasse.
1| # Vi vil bruke Person-klassen videre 2| require 'klasse1.rb' 3| 4| class Person # Klasser er "åpne" skop, og kan enkelt utvides. 5| 6| # get-metode 7| def alder 8| @alder 9| end 10| # set-metode 11| def alder=( ny_alder ) 12| @alder = ny_alder 13| end 14| 15| # tungvint? Jepp, så Ruby har en snarvei: 16| attr_accessor :alder # definerer metodene over automatisk 17| 18| # Vi vil også gjerne kunne lese navnene til personen 19| attr_reader :etternavn, :fornavn 20| 21| end 22| 23| if __FILE__ == $0 # Kun når vi kjører denne filen: 24| p = Person.new( "Nordmann", "Baby" ) 25| p.alder = 3 # Vi setter alderen 26| puts p.alder #=> 3 27| p.alder += 1 # Øk alderen med et år 28| puts p.alder #=> 4 29| puts p.fornavn #=> "Baby" 30| end |
Disse er symboler. (instanser av Symbol
-klassen) De ligner litt på String, men kan ikke endres, de er "internert" og begrenser seg til lovlige navn på klasser, metoder, variabler o.l.
Dette er metoder i Module
-klassen som lager get/set metoder for deg. Som argument tar de symbolene til attributtene du vil lage get/set metoder for.