HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ W+ B/ _5 _ g, \9 P' f& }* \# z1 ~0 E2 n; W
public Object buildActions () {! A o1 H; h o: ~7 y% R9 ~
super.buildActions();4 h% Y! q( a5 ~
W; m: o& i0 l: @2 J1 b
// Create the list of simulation actions. We put these in$ r0 s& ?* J/ g% L% K
// an action group, because we want these actions to be- A2 H X+ Y3 S" U& X- }; ^) m& U1 ^
// executed in a specific order, but these steps should6 n! j+ s( W+ \* D z- v L
// take no (simulated) time. The M(foo) means "The message$ A6 s7 w4 A5 {2 p) @
// called <foo>". You can send a message To a particular5 L5 Y ?9 t: l2 f5 l" a& M" q
// object, or ForEach object in a collection.
# t2 j' w6 {- x2 @2 e , O2 t9 }5 R) D$ O9 `( `7 |9 `
// Note we update the heatspace in two phases: first run# u! V; i6 D; e( Z
// diffusion, then run "updateWorld" to actually enact the; x6 \$ v9 W: ?
// changes the heatbugs have made. The ordering here is& W" D( a% r5 c! d4 [0 B4 K% I7 }
// significant!
4 t: @7 a; J6 X8 V% c( ^7 d- c
+ h2 f8 j' K- x+ v! z: e // Note also, that with the additional1 M. f5 P. m! [0 L X/ a0 H' v
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) S4 Y6 }8 a) v& f2 T% ]$ I6 o // randomize the order in which the bugs actually run
& b- e. l, }; Q: }' u // their step rule. This has the effect of removing any/ i( ?4 ]; n2 }
// systematic bias in the iteration throught the heatbug
- u- ]" Z5 A/ d0 p$ b& K. ^. G // list from timestep to timestep \) }" l+ N2 P3 y- e
; h, t# @7 E# C3 B // By default, all `createActionForEach' modelActions have- E6 s9 c9 n3 ]) j0 |
// a default order of `Sequential', which means that the
+ f- c* k9 }. _ // order of iteration through the `heatbugList' will be7 h: ?1 h: P3 u& {) t+ b; X; @
// identical (assuming the list order is not changed( P6 i" q3 t0 c5 Q. t) h o% o7 J0 G
// indirectly by some other process).
a2 E! V$ S% ] q: B% | ) h1 j d3 b" o: c( j0 A, J
modelActions = new ActionGroupImpl (getZone ());0 i3 W4 v) K: p2 f* q
8 c- f" a$ S$ U+ n
try {) X% X* d: A6 f( C0 h
modelActions.createActionTo$message0 i% Y2 ]8 o' k7 D
(heat, new Selector (heat.getClass (), "stepRule", false));) r3 P% R+ S( x6 M. |
} catch (Exception e) {! d* ]% {2 {/ Z& j
System.err.println ("Exception stepRule: " + e.getMessage ());
, O N7 z0 n+ B, ^ }
/ ?0 S6 d0 G' e' }1 [
/ A! B Q$ j+ F0 V8 w% N6 b- ? try {
) F2 y" I% n( D' W: a% z Heatbug proto = (Heatbug) heatbugList.get (0);0 d' ?2 P7 I3 H. l
Selector sel = 8 T# F' D. P2 Q9 S* z
new Selector (proto.getClass (), "heatbugStep", false);) p+ K9 n2 n5 |& J) E
actionForEach =0 T4 F! c5 u+ n( j$ b
modelActions.createFActionForEachHomogeneous$call
- e) R% v9 W( f; ? (heatbugList,
" v) P6 q' K {. `. L0 P/ e2 h0 \ new FCallImpl (this, proto, sel,1 B: Q! e" x1 w- r1 k. n. ?
new FArgumentsImpl (this, sel)));
{# A e0 H n; ?; b } catch (Exception e) {) ]: ^8 b; e0 q D
e.printStackTrace (System.err);
3 e5 U5 k6 {0 L2 M }
' H" B; l- x8 A& H3 B
& F( z8 u: i* ^! o5 p, b. y syncUpdateOrder ();
8 z3 C+ W* u3 M! a6 ^2 _8 i" z$ `. Q1 C0 l! l8 F3 ]9 `# Z1 g
try {
+ V, W p8 R# T modelActions.createActionTo$message
, Q; |% j3 r# ~" S M" k) r (heat, new Selector (heat.getClass (), "updateLattice", false));, V, v" r% H) s
} catch (Exception e) {$ ~( g! `# W( p4 h
System.err.println("Exception updateLattice: " + e.getMessage ());
# k( t0 |4 g# |$ l( k4 i6 L/ | }
5 l N$ [! N" X8 s# E! A5 z 5 \5 c! x$ g/ E% d. L, Z, G3 U
// Then we create a schedule that executes the
. L( M8 W+ T9 X% E! f // modelActions. modelActions is an ActionGroup, by itself it
l' o$ Y! F' h2 {6 q // has no notion of time. In order to have it executed in! d2 U( `1 {% {3 ]! c" v$ D
// time, we create a Schedule that says to use the
/ C' Z& h! O) h# e0 }/ Z // modelActions ActionGroup at particular times. This
) s8 S0 A# B7 S7 E2 V+ h! }0 l o5 ]: X // schedule has a repeat interval of 1, it will loop every
. R _2 C, h# U) o9 v& q // time step. The action is executed at time 0 relative to
+ V; ~- v- J" f/ C% t" D+ G4 t // the beginning of the loop.
J! S' o2 V8 ^ c' [8 }: [5 c7 Y# H4 A' E/ c
// This is a simple schedule, with only one action that is
5 {5 ]( f$ B0 J$ G# s9 o* [ // just repeated every time. See jmousetrap for more% x6 c, n. A: m- S; i9 p, l5 ~# q) I
// complicated schedules.9 o8 H8 r3 J# |3 i$ W& ~# h! O
# Y! v+ l# J( |& g0 }! _: V! k4 j: ~
modelSchedule = new ScheduleImpl (getZone (), 1);
. M! h7 P2 R- a" d modelSchedule.at$createAction (0, modelActions);* C$ d, E1 c3 @/ ]2 b5 O
( \/ s8 V% G6 u& J f+ V return this;# G( z# D4 ?' T8 T: W8 u4 G
} |