HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 q# S4 ]+ i4 P9 E( b+ e4 |3 E2 Q* u: w: {- m8 s K
public Object buildActions () {0 {2 D1 `$ H2 \6 G
super.buildActions();
4 w9 t9 T! Z n8 M
! D. z5 A% R* }) U: l // Create the list of simulation actions. We put these in5 A5 X- Z* e, ?4 t
// an action group, because we want these actions to be$ j3 z* A$ i1 H5 _7 t9 }
// executed in a specific order, but these steps should
0 ?, n% K ?6 J$ `, J // take no (simulated) time. The M(foo) means "The message6 b' o7 K$ ~2 [5 E! s
// called <foo>". You can send a message To a particular
% E b0 N/ n& _, I# U9 |7 E // object, or ForEach object in a collection.( x6 X7 b( U: r a, T5 \
$ C2 p7 i" Y" V5 S- }
// Note we update the heatspace in two phases: first run$ P) \' @: l1 g) T! n8 S
// diffusion, then run "updateWorld" to actually enact the( }" e3 L$ u$ _" z5 {4 r
// changes the heatbugs have made. The ordering here is2 h. f F. T0 s9 L- Y
// significant!
; X5 l( Y0 C9 }2 Z7 t2 J
) s$ \1 ^9 A0 Q3 K' v3 P // Note also, that with the additional* l0 ^% v7 \6 \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 j" o5 m8 [' {- ~* Y( w( d // randomize the order in which the bugs actually run# p* N; y4 `/ B" G8 j0 t1 p
// their step rule. This has the effect of removing any3 t( E G L9 _3 h$ j7 G O
// systematic bias in the iteration throught the heatbug
2 ^7 C2 L. E& i+ \. E3 @ // list from timestep to timestep# \& b6 R$ T" z( r/ l; k$ n1 E
9 R9 C- ^1 x* Q) t7 ^; @ // By default, all `createActionForEach' modelActions have( E# Y8 m/ N% ?. d" ~0 h0 ^8 ]# @
// a default order of `Sequential', which means that the
2 M, C3 l$ {4 q // order of iteration through the `heatbugList' will be8 E* ]. ]. O$ \0 k0 r
// identical (assuming the list order is not changed
' S! G2 G, A7 ~1 V1 U // indirectly by some other process).- W- w" a) B+ v, \" x1 Z/ I
- T! a1 ?4 q) Z- M( e# s: e* D6 T
modelActions = new ActionGroupImpl (getZone ());
: O# ^/ O- h% ]* X+ f6 M5 b8 U. F: t }
try {
! X9 n9 x8 p! n2 h+ _5 G modelActions.createActionTo$message
/ q. J; h/ W4 Z+ o (heat, new Selector (heat.getClass (), "stepRule", false));
! s6 z3 E3 u$ S+ T6 d' O } catch (Exception e) {5 e, a" M2 g6 k) H8 M6 ~. S+ h# y4 }
System.err.println ("Exception stepRule: " + e.getMessage ());
/ A# g1 w- g3 L5 O4 k( _ }
5 Z0 c2 [1 j, |4 i& S# L) b* q" N" p4 b/ |$ X n
try {' J4 ]5 L1 ~" N4 I6 Y2 |
Heatbug proto = (Heatbug) heatbugList.get (0);: P" y$ y6 Q% E) N
Selector sel = ! I& n5 W% M" {) a/ e: [
new Selector (proto.getClass (), "heatbugStep", false);
: q- d2 w+ l C2 V, ` actionForEach =
1 _# |! B" d+ Z2 ~7 S- g modelActions.createFActionForEachHomogeneous$call
/ T+ N& X" k# {* x0 J (heatbugList,: u% r. o& B, D' i$ Z/ m/ A
new FCallImpl (this, proto, sel,
: w. c/ o b" K6 J new FArgumentsImpl (this, sel)));! p/ { h% `/ L4 i' j; \; @
} catch (Exception e) {+ g; C/ j [, y9 F
e.printStackTrace (System.err);
- ~& _: n/ E. }4 F4 W/ p2 r# R }
" G! y" U2 w. L3 Y
6 D3 e9 B3 v8 c8 j$ V- } syncUpdateOrder ();' m6 V! P- r# P' L, x! |
, r3 Y/ n* P* W9 v( {0 z try {
/ w" D# S" F* f$ w3 r0 I modelActions.createActionTo$message 6 s% s$ Q2 x% @2 |9 z6 g# a1 _' ?
(heat, new Selector (heat.getClass (), "updateLattice", false));6 o, s: o1 C- b- b4 Z+ f& M
} catch (Exception e) {
h% c- F) B* P- Z0 u3 R8 F1 ] System.err.println("Exception updateLattice: " + e.getMessage ());' {2 y" q( ~$ q* P7 L" R9 _
}) Z2 C/ X) x! z. t: _
1 u# R% I3 {. L1 a
// Then we create a schedule that executes the
2 B9 P" u5 q6 Z // modelActions. modelActions is an ActionGroup, by itself it; y0 k* a$ T+ o, _; ?' P5 m
// has no notion of time. In order to have it executed in
& l6 A! W/ [) M // time, we create a Schedule that says to use the
! p; a: d H% V- r; W // modelActions ActionGroup at particular times. This5 _ S# m2 W& E3 q
// schedule has a repeat interval of 1, it will loop every
; ]& G! [0 C/ t: b* B7 k. J' C! x // time step. The action is executed at time 0 relative to
9 S# V9 Q `& H7 T# R" |+ u1 G1 L4 c* S // the beginning of the loop.
* R: V; H4 _) h/ j' R* ]. ^3 q8 z( k, @8 R( e. n% {
// This is a simple schedule, with only one action that is7 f1 D$ R! b1 f# S1 d
// just repeated every time. See jmousetrap for more' z0 e2 ?: }& b4 x* n
// complicated schedules.% {# }, H- ^4 L9 l+ E% a" A$ {4 \
' V1 ^) F$ N: ~2 m) N. F% F modelSchedule = new ScheduleImpl (getZone (), 1);
3 l+ W7 _4 |7 u modelSchedule.at$createAction (0, modelActions);# L8 o. e+ o$ K
% D" X$ @6 Z) F% i return this;, O" o& t8 H Y6 Q
} |