HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# a8 W, {) Q. I5 W& V: | Y
0 O. ?. T" U5 S+ E
public Object buildActions () {
: w! E5 j. u. P- ?+ W super.buildActions();
J# h+ C6 u) T# c2 C( A# Z" T8 l
+ r$ c4 m& }, O$ e3 b // Create the list of simulation actions. We put these in
* a7 f+ e9 x, h6 I // an action group, because we want these actions to be( X4 f) N! x+ _. ~$ P0 G7 b9 e
// executed in a specific order, but these steps should
( c7 x" C T/ Y // take no (simulated) time. The M(foo) means "The message/ P2 C6 ` X I* Z& w; F/ Z/ J
// called <foo>". You can send a message To a particular/ q1 l# I( Q& U1 M% c4 T B3 ]7 B. x/ t
// object, or ForEach object in a collection.
3 R( u# r" r" G1 r) V3 |
$ t% x! b+ @5 @. r/ U- ~ // Note we update the heatspace in two phases: first run
9 v/ y. A. G6 Q( {! M6 z9 I, z. t // diffusion, then run "updateWorld" to actually enact the, Y" z, p: \& I
// changes the heatbugs have made. The ordering here is U# V! @5 \0 s0 A+ ^' L2 O$ w
// significant!# t! Z" i" _$ Q. b3 A3 v
0 K: t. Q" X: Q // Note also, that with the additional# A8 W- \5 U8 @( m
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ s6 C5 L7 f, u$ C! j+ G# i4 ?
// randomize the order in which the bugs actually run
0 h q% k/ M& A- [. q; ]6 `1 `/ e8 ^ // their step rule. This has the effect of removing any
; i4 N4 P4 z4 L$ G; ? r // systematic bias in the iteration throught the heatbug: B* B1 D; y' O1 G
// list from timestep to timestep
2 t9 _$ {5 w! g
( M9 u& h6 D* ? // By default, all `createActionForEach' modelActions have
" }5 I4 f$ M! c \' f // a default order of `Sequential', which means that the
! F1 V- U8 d0 K( `2 A4 J // order of iteration through the `heatbugList' will be+ e% T" ?- A* r, Q& X& z
// identical (assuming the list order is not changed; A4 o$ o: c8 ]( z! O4 @
// indirectly by some other process).
0 c' c* y9 k/ @5 [ T ; H6 Y* J) L2 X& x7 F
modelActions = new ActionGroupImpl (getZone ());0 U2 K' r4 f' X) q. }/ `
( I0 @3 l. Q" y# v
try {
9 }# t q" b8 A modelActions.createActionTo$message
. x" E1 X6 J8 V9 F (heat, new Selector (heat.getClass (), "stepRule", false));
& x6 M) }+ x' _; m } catch (Exception e) {. t, z( f2 i6 s1 x: @6 e/ T: e* N
System.err.println ("Exception stepRule: " + e.getMessage ());7 a: {0 o4 C4 `5 e% v2 ]5 B
}
0 t! j0 M7 y- i+ V9 W! |. z1 Q1 e% I& h* f1 a0 F& n+ [5 }
try {1 p) H0 |. y [" u" \' P1 W
Heatbug proto = (Heatbug) heatbugList.get (0);5 O+ o3 W0 v5 u, m( ~. T% H: C w
Selector sel =
) H! B) r* z9 L4 s new Selector (proto.getClass (), "heatbugStep", false);' h8 o2 p4 G/ |' J4 T
actionForEach =
* |0 J4 ^1 j. Z3 L5 F, O modelActions.createFActionForEachHomogeneous$call* K1 V* ^: c$ C. T% L4 E! Y3 O
(heatbugList,$ n m- z: u5 x2 m
new FCallImpl (this, proto, sel,
5 L: b' W& K0 c" j6 X8 A new FArgumentsImpl (this, sel)));
: x& I, t& o2 w, \) p } catch (Exception e) {
6 p" D' P! O: J9 t5 | e.printStackTrace (System.err);& a' h [! o; n; z- ~9 [) @4 G V
}
l: C" ^. H, C: ] ; u5 U* y8 \2 S+ V! i- m- A
syncUpdateOrder ();: |. [! O3 A2 ^' Z7 ~" v4 g
: L+ K2 t& g) f
try {7 c/ e4 e# E3 s$ I
modelActions.createActionTo$message 6 x, g; g, j( x4 y- D6 f/ T$ n% @
(heat, new Selector (heat.getClass (), "updateLattice", false));) f0 X9 |+ {! C# m9 e) |4 `
} catch (Exception e) {7 {) i) f7 v5 e7 T% {8 p
System.err.println("Exception updateLattice: " + e.getMessage ());7 n9 f* O8 {7 l! n6 }
}
# K) Q/ c ?! O* l* r( U : X4 v' g* ]0 w3 k
// Then we create a schedule that executes the
2 o6 N; H# L4 F: E2 C+ o/ t // modelActions. modelActions is an ActionGroup, by itself it
- [! E9 R8 L1 M // has no notion of time. In order to have it executed in; [8 A6 q: g+ E" w3 Z$ V0 Q
// time, we create a Schedule that says to use the
$ n' j" z; _; [; y9 ]- r // modelActions ActionGroup at particular times. This
; \$ \% T2 O6 d) N% l5 M- Q. `' f" M // schedule has a repeat interval of 1, it will loop every
( n0 L& r; c8 x. P // time step. The action is executed at time 0 relative to+ k1 k5 |2 y' E' i
// the beginning of the loop.
; |: k. A+ B& V# ^8 C1 V! `2 P( z. J4 Q5 R
// This is a simple schedule, with only one action that is- \& t' s/ d8 Q; I1 V
// just repeated every time. See jmousetrap for more
0 j! M* y& Q b) A/ ]+ W& ~; ~ // complicated schedules.
5 b+ [/ T% N; |( w0 ]$ M - P3 S% g/ N; l+ B3 V! X' D7 C
modelSchedule = new ScheduleImpl (getZone (), 1);
( R& y" G* C) B; v# l& L% T: `5 [) k, L modelSchedule.at$createAction (0, modelActions);
. k$ y+ H" U' Z) q5 D4 V% h
4 e. n# L" K& m3 t return this;6 m0 l+ _! U/ n# G+ z. x, \
} |