HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 v( `; ~0 b3 X; y# D1 f/ \
5 H! m0 ^# S% a! y! J, x4 k6 U2 o
public Object buildActions () {) |0 y }- p& R; u9 I& g5 e
super.buildActions();& d9 P u; ]) w2 L1 q
1 G6 w, ^* B) p" {. D/ B$ w
// Create the list of simulation actions. We put these in
, K4 ]6 W! o* ]' A, I1 t // an action group, because we want these actions to be2 m! z, j1 H0 ^9 m$ h
// executed in a specific order, but these steps should
+ o5 p( C3 l1 j5 W% d( s- O1 j // take no (simulated) time. The M(foo) means "The message
: b7 W i+ Z4 Q5 | // called <foo>". You can send a message To a particular6 N$ B9 p- g3 ^! `3 i1 z
// object, or ForEach object in a collection.
3 c; F0 r5 q9 A3 C$ c1 y# @6 A / q8 ^/ n5 x8 u3 h1 ]: a( O
// Note we update the heatspace in two phases: first run4 i& k/ K# f/ a/ j" ?/ T
// diffusion, then run "updateWorld" to actually enact the
# N5 {! `% q1 S; e5 U# G+ h* B // changes the heatbugs have made. The ordering here is
5 i: S7 p5 j7 d$ L/ S$ _ // significant!3 p. f" t) h! b3 X# B. a
8 ~2 L$ S/ ]1 z // Note also, that with the additional
3 v3 L7 u) L" u2 Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
, f# C& C7 d7 B7 S // randomize the order in which the bugs actually run
8 a7 Y9 m9 i6 k2 r6 u% |" ]* ~/ q // their step rule. This has the effect of removing any
+ Z* N2 I; }4 H) Z6 R) F8 S // systematic bias in the iteration throught the heatbug. s/ G3 g# j% w; ]. n) X x
// list from timestep to timestep7 w- d& o# o; f2 g
( L7 T( q* `* o // By default, all `createActionForEach' modelActions have
8 Y d& ^6 I4 j4 ?( ?( l% t // a default order of `Sequential', which means that the. N/ r' Q3 l( d! j
// order of iteration through the `heatbugList' will be
t1 o f) h; U7 w2 C // identical (assuming the list order is not changed0 ]* Y: k6 n/ @
// indirectly by some other process).
, E/ T+ S8 z7 |! v 6 D# v+ g6 @2 E4 z3 j8 ^! O4 U
modelActions = new ActionGroupImpl (getZone ());0 t6 w; W% b* e
3 |$ c. ?, L2 x! t6 m3 L
try {
5 z0 B+ C" f1 ^' K( v) @& Y, L4 v$ Z modelActions.createActionTo$message
5 |0 H* ^4 p6 h% d E% A$ A" [ (heat, new Selector (heat.getClass (), "stepRule", false));3 c# _1 D0 ?. @; R8 ~
} catch (Exception e) {! r1 J. v; U8 r# h6 u& m& _
System.err.println ("Exception stepRule: " + e.getMessage ());$ E# ~; D4 F9 i) B" q8 s% `
}
0 N/ [6 I9 y$ y, O! }0 F3 J
: ?4 j; W5 [5 N, U6 a+ c `" f6 P try {
. J# O7 B# N7 r7 u Heatbug proto = (Heatbug) heatbugList.get (0);6 N# W2 x3 F, e, D$ W2 V( n
Selector sel = ( f- _' y5 g' Z0 K5 ?) v! b# F2 F( C+ n
new Selector (proto.getClass (), "heatbugStep", false);; J. d; P" C: l4 E+ d' X {% Z& y
actionForEach = D- e, L- [% F
modelActions.createFActionForEachHomogeneous$call
8 I& H) |% ~6 \3 S; C. f (heatbugList,- S9 o5 R2 q+ O. n0 t
new FCallImpl (this, proto, sel,& C( U8 N! `3 V* U; j
new FArgumentsImpl (this, sel)));0 s. ~& m9 H) z7 J6 F) X
} catch (Exception e) {
/ ^: y( ~7 M8 Z2 A. i e.printStackTrace (System.err);/ a' J8 c! |& o
}
* G) |" i7 t0 ~% p; e& r/ |% c$ j
- }4 o* A2 x" P- r/ e syncUpdateOrder ();4 J- o" p9 J# T0 K& p& W/ Q/ j
$ ^9 g& x4 I2 t6 l" A T+ i try {
* M) n# S# G, s modelActions.createActionTo$message
7 E/ s4 }' W2 s (heat, new Selector (heat.getClass (), "updateLattice", false));. C' _$ u7 k# V A! r0 n/ O: T
} catch (Exception e) { i. A/ D& B* ~( I4 U) ^! Q8 y
System.err.println("Exception updateLattice: " + e.getMessage ());7 }3 b f/ k+ J$ {0 n. h! Y+ l
}- a6 g+ R& h" {' W
) i/ M1 _/ Q7 M/ R# ^
// Then we create a schedule that executes the
5 |, {# J) m+ I' P // modelActions. modelActions is an ActionGroup, by itself it
8 `" a; n* U a // has no notion of time. In order to have it executed in
/ `# H. ?; K7 j% H0 r // time, we create a Schedule that says to use the
) z8 j( [# C8 C9 {1 ` // modelActions ActionGroup at particular times. This( A/ V4 z; O1 d( y
// schedule has a repeat interval of 1, it will loop every1 r3 x3 R; v& x2 d
// time step. The action is executed at time 0 relative to$ m) n' v5 \9 l6 d6 _ a( u3 b$ ~: l8 e
// the beginning of the loop.
( P9 r3 r! e! Q" o$ X
; l( o! C' S% F! Z6 o8 D- C' ? // This is a simple schedule, with only one action that is
5 I7 b. y" B) N& R* {% Q9 d // just repeated every time. See jmousetrap for more- b; f2 b# N/ M% o7 v/ m, d
// complicated schedules., a+ a' A- z7 h4 t$ j3 g
7 T5 [( N. m' N- M( @$ \; c1 e* I
modelSchedule = new ScheduleImpl (getZone (), 1);
: V0 ]! E* F% } _ modelSchedule.at$createAction (0, modelActions);
3 A8 A1 G# E; {4 R+ n
$ l/ E$ L* M: V. u return this;# L! y5 Y' Z' H) B) s
} |