Променљиве инстанције почињу знаком (@) и могу се позивати само у методама класе. Они се од локалних променљивих разликују по томе што не постоје ни у једној посебној Обим. Уместо тога, слична променљива табела се чува за сваку инстанцу класе. Променљиве инстанције живе у инстанци класе, све док та инстанца остане жива, тако ће постојати и променљиве инстанце.
Променљиве инстанце се могу упутити у било којој методи те класе. Све методе класе користе исту инстанцу променљива табела, за разлику од локалних променљивих, где ће свака метода имати различиту табелу променљивих. Могуће је приступити променљивим примерцима без претходног дефинисања. Ово неће створити изузетак, али вредност променљиве ће бити нула а издаће се упозорење ако покренете Руби са -в прекидач.
Овај пример показује употребу променљивих примерака. Имајте на уму да схебанг садржи -в прекидач, који ће штампати упозорења у случају да се појаве. Такође, имајте на уму неисправну употребу изван методе у опсегу класе. Ово је нетачно и расправља се у наставку.
Зашто @тест променљива нетачна? Ово има везе са делокругом и начином на који Руби ствари спроводи. Унутар методе, опсег променљиве инстанце се односи на посебну инстанцу те класе. Међутим, у домену класе (унутар класе, али изван било које методе), опсег је инстанца класе Обим. Руби имплементира хијерархију класе инстанцирањем Класа објеката, тако да постоји друга инстанца овде играмо. Први инстанца је инстанца Класа класа, и овде је @тест ће ићи. Друга инстанца је инстанција ТестЦласс, и ово је место @валуе ће ићи. Ово постаје мало збуњујуће, али само запамтите да никад не користите @инстан_вариаблес изван метода. Ако вам је потребно складиште за све класе, користите @@ цласс_вариаблес, која се може користити било где у опсегу класе (унутар или изван метода) и понашаће се исто.
Обично не можете да приступите променљивим примерцима изван објекта. На пример, у горњем примеру, не можете једноставно назвати т.валуе или т. @ вредност да бисте приступили променљивој инстанци @валуе. Ово би прекршило правила енкапсулација. Ово се такође односи на инстанце дечјих класа, они не могу приступити променљивим примерцима који припадају родитељској класи иако су технички исти тип. Дакле, да бисте обезбедили приступ променљивим примерцима, прибор методе морају бити декларисане.
Следећи пример показује како се могу уписати методе приступа. Међутим, имајте на уму то Руби пружа пречицу и да овај пример постоји само да вам покаже како функционишу методе приступа. Обично није уобичајено видети методе приступа написане на овај начин, осим ако за приступник није потребна некаква додатна логика.
Пречице чине ствари мало лакшим и компактнијим. Постоје три ове помоћне методе. Морају се изводити у опсегу класе (унутар класе, али изван било које методе), и динамички ће дефинисати методе слично као методе дефинисане у горњем примеру. Овдје се не догађа никаква магија и изгледају као кључне ријечи језика, али стварно само динамички дефинирају методе. Такође, ови прибор обично иду у врх класе. То читаоцу даје тренутни преглед који ће променљиви члан бити доступан изван класе или дечије класе.
Постоје три ове методе приступа. Свако од њих има листу симбола који описују променљиве инстанце којима се може приступити.
- аттр_реадер - Дефинишите методе "читача", као што су име метода у горњем примеру.
- аттр_вритер - Дефинишите "Вритер" методе као што су аге = метода у горњем примеру.
- аттр_аццессор - Дефинишите и методе "читача" и "писца".
Када користити инстанцне променљиве
Сада када знате које су променљиве примера, када их користите? Променљиве инстанције треба користити када представљају стање објекта. Име и старост ученика, оцена, итд. Не треба их користити за привремено складиштење, за то су локалне варијабле. Међутим, они би се евентуално могли користити за привремено складиштење између позива метода за рачунање у више фаза. Међутим, ако то радите, можда ћете желети преиспитати састав своје методе и уместо њих ове променљиве претворити у параметре метода.