📄 classes, objects, and ties.mht
字号:
color=3D#00ffff>{</FONT> <FONT color=3D#cdad00>@PEERS</FONT> =3D <FONT =
color=3D#cdad00>@_</FONT><FONT color=3D#00ffff>;</FONT> <FONT =
color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>return</FONT> <FONT =
color=3D#cdad00>@PEERS</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>exclaim</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$self</FONT> =
=3D attr <FONT color=3D#ff7f50>shift</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>return</FONT> <FONT =
color=3D#98fb98>sprintf</FONT> <FONT color=3D#00cd00>"Hi, I'm =
</FONT><FONT color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>, age =
</FONT><FONT color=3D#cdcd00>%d</FONT><FONT color=3D#00cd00>, working =
with </FONT><FONT color=3D#cdcd00>%s</FONT><FONT =
color=3D#00cd00>"</FONT>,
$NAME, $AGE, <FONT color=3D#98fb98>join</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>", "</FONT>, <FONT =
color=3D#cdad00>@PEERS</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>happy_birthday</FONT> <FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$self</FONT> =
=3D attr <FONT color=3D#ff7f50>shift</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>return</FONT> ++$AGE<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN716>Managing Class Data</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>package</FONT> <FONT =
color=3D#b2dfee>Person</FONT><FONT color=3D#00ffff>;</FONT>
$Body_Count =3D <FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>;</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>population</FONT> =
<FONT color=3D#00ffff>{</FONT> <FONT color=3D#ffa500>return</FONT> =
$Body_Count <FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>new</FONT> <FONT =
color=3D#00ffff>{</FONT> <FONT =
color=3D#bebebe># constructor
</FONT> $Body_Count++<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>return</FONT> <FONT =
color=3D#98fb98>bless</FONT><FONT color=3D#00ffff>({}</FONT>, <FONT =
color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#ff7f50>DESTROY</FONT> =
<FONT color=3D#00ffff>{</FONT> --$BodyCount <FONT =
color=3D#00ffff>}</FONT> <FONT color=3D#bebebe># =
destructor
</FONT>
<FONT color=3D#bebebe># later, the user can say this:
</FONT><FONT color=3D#ffa500>package</FONT> <FONT =
color=3D#b2dfee>main</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>for</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT>..<FONT color=3D#cdcd00>10</FONT><FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>{</FONT> <FONT =
color=3D#ff7f50>push</FONT> <FONT color=3D#cdad00>@people</FONT>, =
Person->new <FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"There are =
</FONT><FONT color=3D#cdcd00>%d</FONT><FONT color=3D#00cd00> people =
alive.\n"</FONT>, Person->population<FONT color=3D#00ffff>();</FONT>
There are <FONT color=3D#cdcd00>10</FONT> people alive.
<FONT color=3D#bebebe>#-----------------------------
</FONT>$him =3D Person->
new<FONT color=3D#00ffff>()</FONT>
<FONT color=3D#00ffff>;</FONT>
$him->gender<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"male"</FONT><FONT color=3D#00ffff>);</FONT>
$her =3D Person->
new<FONT color=3D#00ffff>()</FONT>
<FONT color=3D#00ffff>;</FONT>
$her->gender<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"female"</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT>FixedArray->Max_Bounds<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>100</FONT><FONT color=3D#00ffff>);</FONT> =
<FONT color=3D#bebebe># set for whole class
</FONT>$alpha =3D FixedArray->new<FONT color=3D#00ffff>();</FONT>
<FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"Bound on =
alpha is </FONT><FONT color=3D#cdcd00>%d</FONT><FONT =
color=3D#00cd00>\n"</FONT>, $alpha->Max_Bounds<FONT =
color=3D#00ffff>();</FONT>
<FONT color=3D#cdcd00>100</FONT>
$beta =3D FixedArray->new<FONT color=3D#00ffff>();</FONT>
$beta->Max_Bounds<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>50</FONT><FONT color=3D#00ffff>);</FONT> =
<FONT color=3D#bebebe># still sets for whole class
</FONT><FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"Bound =
on alpha is </FONT><FONT color=3D#cdcd00>%d</FONT><FONT =
color=3D#00cd00>\n"</FONT>, $alpha->Max_Bounds<FONT =
color=3D#00ffff>();</FONT>
<FONT color=3D#cdcd00>50</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>package</FONT> <FONT =
color=3D#b2dfee>FixedArray</FONT><FONT color=3D#00ffff>;</FONT>
$Bounds =3D <FONT color=3D#cdcd00>7</FONT><FONT color=3D#00ffff>;</FONT> =
<FONT color=3D#bebebe># default
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>new</FONT> =
<FONT color=3D#00ffff>{</FONT> <FONT color=3D#98fb98>bless</FONT><FONT =
color=3D#00ffff>(</FONT> <FONT color=3D#00ffff>{}</FONT>, <FONT =
color=3D#ff7f50>shift</FONT> <FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>Max_Bounds</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$proto</FONT> =
=3D <FONT color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
$Bounds =3D <FONT color=3D#ff7f50>shift</FONT> <FONT =
color=3D#ffa500>if</FONT> <FONT color=3D#cdad00>@_</FONT><FONT =
color=3D#00ffff>;</FONT> <FONT color=3D#bebebe># allow updates
</FONT> <FONT color=3D#ffa500>return</FONT> $Bounds<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>Max_Bounds</FONT> <FONT color=3D#00ffff>{</FONT> $Bounds =
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>new</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$class</FONT> =
=3D <FONT color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$self</FONT> =
=3D <FONT color=3D#98fb98>bless</FONT><FONT color=3D#00ffff>({}</FONT>, =
$class<FONT color=3D#00ffff>);</FONT>
$self-><FONT color=3D#00ffff>{</FONT><FONT =
color=3D#00cd00>Max_Bounds_ref</FONT><FONT color=3D#00ffff>}</FONT> =3D =
\$Bounds<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>return</FONT> $self<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN719>Using Classes as Structs</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Class::Struct</FONT><FONT color=3D#00ffff>;</FONT> =
<FONT color=3D#bebebe># load struct-building module
</FONT>
struct <FONT color=3D#00cd00>Person</FONT> =3D> <FONT =
color=3D#00ffff>{</FONT> <FONT color=3D#bebebe># create a =
definition for a "Person"
</FONT> <FONT color=3D#00cd00>name</FONT> =3D> <FONT =
color=3D#00cd00>'$', # name field is a scalar
age =3D> '</FONT>$', <FONT color=3D#bebebe># age =
field is also a scalar
</FONT> <FONT color=3D#00cd00>peers</FONT> =3D> <FONT =
color=3D#00cd00>'@'</FONT>, <FONT color=3D#bebebe># but =
peers field is an array (reference)
</FONT><FONT color=3D#00ffff>};</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$p</FONT> =3D =
Person->
new<FONT color=3D#00ffff>()</FONT>
<FONT color=3D#00ffff>;</FONT> <FONT color=3D#bebebe># allocate an =
empty Person struct
</FONT>
$p->name<FONT color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"Jason =
Smythe"</FONT><FONT color=3D#00ffff>);</FONT> <FONT =
color=3D#bebebe># set its name field
</FONT>$p->age<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>13</FONT><FONT color=3D#00ffff>);</FONT> =
<FONT color=3D#bebebe># set its age field
</FONT>$p->peers<FONT color=3D#00ffff>(</FONT> <FONT =
color=3D#00ffff>[</FONT><FONT color=3D#00cd00>"Wilbur"</FONT>, <FONT =
color=3D#00cd00>"Ralph"</FONT>, <FONT color=3D#00cd00>"Fred"</FONT> =
<FONT color=3D#00ffff>]</FONT> <FONT color=3D#00ffff>);</FONT> <FONT =
color=3D#bebebe># set its peers field
</FONT>
<FONT color=3D#bebebe># or this way:
</FONT>@<FONT color=3D#00ffff>{</FONT>$p->peers<FONT =
color=3D#00ffff>}</FONT> =3D <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"Wilbur"</FONT>, <FONT color=3D#00cd00>"Ralph"</FONT>, =
<FONT color=3D#00cd00>"Fred"</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe># fetch various values, including the zeroth =
friend
</FONT><FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"At age =
</FONT><FONT color=3D#cdcd00>%d</FONT><FONT color=3D#00cd00>, =
</FONT><FONT color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>'s first =
friend is </FONT><FONT color=3D#cdcd00>%s</FONT><FONT =
color=3D#00cd00>.\n"</FONT>,
$p->age, $p->name, $p->peers<FONT =
color=3D#00ffff>(</FONT><FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Class::Struct</FONT><FONT color=3D#00ffff>;</FONT>
struct <FONT color=3D#00cd00>Person</FONT> =3D> <FONT =
color=3D#00ffff>{</FONT><FONT color=3D#00cd00>name</FONT> =3D> <FONT =
color=3D#00cd00>'$', age =3D> '</FONT>$'<FONT =
color=3D#00ffff>};</FONT> <FONT color=3D#bebebe>#'
</FONT>struct <FONT color=3D#00cd00>Family</FONT> =3D> <FONT =
color=3D#00ffff>{</FONT><FONT color=3D#00cd00>head</FONT> =3D> <FONT =
color=3D#00cd00>'Person'</FONT>, <FONT color=3D#00cd00>address</FONT> =
=3D> <FONT color=3D#00cd00>'$', members =3D> '</FONT>@<FONT =
color=3D#00cd00>'}; #'</FONT>
$folks =3D Family->
new<FONT color=3D#00ffff>();</FONT>
$dad =3D $folks->head<FONT color=3D#00ffff>;</FONT>
$dad->name<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"John"</FONT><FONT color=3D#00ffff>);</FONT>
$dad->age<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>34</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>printf</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"</FONT><FONT color=3D#cdcd00>%s</FONT><FONT =
color=3D#00cd00>'s age is </FONT><FONT color=3D#cdcd00>%d</FONT><FONT =
color=3D#00cd00>\n"</FONT>, $folks->head->name, =
$folks->head->age<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>Person::age</FONT> <FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Carp</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$self</FONT>, <FONT color=3D#9ac0cd>$age</FONT><FONT =
color=3D#00ffff>)</FONT> =3D <FONT color=3D#cdad00>@_</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT =
color=3D#00ffff>(</FONT><FONT color=3D#cdad00>@_</FONT> > <FONT =
color=3D#cdcd00>2</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT> confess <FONT color=3D#00cd00>"too many =
arguments"</FONT> <FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> =
</FONT>
<FONT color=3D#ffa500>elsif</FONT> <FONT =
color=3D#00ffff>(</FONT><FONT color=3D#cdad00>@_</FONT> =3D=3D <FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -