HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 J8 }+ a2 r f k% t4 E& g6 x! A# v& Q0 Y. W; |
public Object buildActions () {
/ l3 v: M( {& E+ C# Q; Q super.buildActions();
" ^8 V6 W# J+ ~$ t7 x3 \+ \# w
( ~9 ~8 s& ?5 a0 Q // Create the list of simulation actions. We put these in( Y. {2 {5 h! L+ d' m" J. k
// an action group, because we want these actions to be
! ]/ A& H: R, g // executed in a specific order, but these steps should' i8 J, Z) o4 B7 ]! q. X! j, Q
// take no (simulated) time. The M(foo) means "The message+ W% A2 z* \. Z5 @
// called <foo>". You can send a message To a particular6 ]3 @+ z( u3 y: _6 [; U
// object, or ForEach object in a collection.
0 n8 Y+ o, Y- F: w' \" `7 l& @ $ Q7 B9 W, H6 F0 H$ O! C
// Note we update the heatspace in two phases: first run: w& A/ V3 v: I) ?) W& H% ~& T
// diffusion, then run "updateWorld" to actually enact the
$ Q+ ^9 o. r, J e2 x // changes the heatbugs have made. The ordering here is( W: m) R- Q7 ^' C$ d6 d2 Q, k
// significant!
. @) ?( L* B2 ^- w6 s
' A) {( ^4 c' _/ ? // Note also, that with the additional
) X, h v" o- A // `randomizeHeatbugUpdateOrder' Boolean flag we can l# N1 e. A& `
// randomize the order in which the bugs actually run$ G; }8 F# v/ M9 H8 W
// their step rule. This has the effect of removing any
" b9 i7 Q( c! f7 [ // systematic bias in the iteration throught the heatbug
: q' n* N: L0 ^7 Y // list from timestep to timestep
% W9 S. m; a3 g( Y1 }+ ]
+ c: M2 P+ Q5 Y // By default, all `createActionForEach' modelActions have; Q `! z, D( X3 h! v. v: N5 `
// a default order of `Sequential', which means that the1 a4 a8 J3 Q3 x+ ]* o* L# J, W
// order of iteration through the `heatbugList' will be
; s3 r! H$ r# p! `! [0 d5 t& p" i // identical (assuming the list order is not changed
4 | A! i. t7 {0 [% P$ ~1 w7 _ // indirectly by some other process).
2 k9 g' o3 K$ ~5 p9 R. ]( a 1 O2 ^& E/ z# I
modelActions = new ActionGroupImpl (getZone ());7 t# ~$ \/ ~# l! M o4 i8 R
# ^1 r; k+ C( R3 V* D( f$ m5 v: j try {6 r0 S0 |. r# l
modelActions.createActionTo$message9 [; q! J2 s3 |$ k8 e# g( |: [
(heat, new Selector (heat.getClass (), "stepRule", false));, B5 j/ l* l5 Y; g
} catch (Exception e) {( g h) }- x! B7 T) n$ E
System.err.println ("Exception stepRule: " + e.getMessage ());
# C& d" e+ M. Z }$ S0 R* `+ n2 p% z f7 |* U
6 B! B/ x4 |; }5 A try {, i1 p1 _' c) E$ p* Y G- w5 @
Heatbug proto = (Heatbug) heatbugList.get (0); X5 O a% T* D9 @ [0 q7 }
Selector sel =
9 S% C7 l3 L: ] new Selector (proto.getClass (), "heatbugStep", false);
! [! a( S: U @) M* v; D& D4 t) \0 B( @ actionForEach =- n" I& O9 x+ e; Y$ r8 p( A% f3 y
modelActions.createFActionForEachHomogeneous$call
$ j- J9 Y' M7 x& j (heatbugList,
: {; T9 X1 X. E6 C" G- {8 d, P new FCallImpl (this, proto, sel,
6 l# q9 h+ ]: [% y4 _. `) T- M2 T4 M new FArgumentsImpl (this, sel)));' u3 M. r( ~3 g5 @, z1 A* J: a
} catch (Exception e) {
4 g& }; d4 f7 B& c e.printStackTrace (System.err);/ x7 i7 x" h/ s. h4 x
}9 r6 Y7 K2 b7 p4 }9 t
3 n# r$ t' H8 b, |3 N0 u9 R
syncUpdateOrder ();: w; H- `, A$ |/ d/ o2 i" y; j
8 `3 C' { U4 f& M6 {5 E% S try {% ]/ H5 _9 s6 J! B
modelActions.createActionTo$message ! K7 L# _. w5 j/ c+ }8 R& ], i
(heat, new Selector (heat.getClass (), "updateLattice", false));
) z; s/ B8 I' A t8 a } catch (Exception e) {
! n* N5 Q+ Q8 H0 D+ O System.err.println("Exception updateLattice: " + e.getMessage ());7 H6 D6 ^% ^+ C: {
}
1 k4 N, R0 {5 r) C7 k ! t X- g c' W8 a
// Then we create a schedule that executes the
8 x6 o& q! H$ u$ h! u! V8 Y. U% L // modelActions. modelActions is an ActionGroup, by itself it
' G) O, h" L# ? // has no notion of time. In order to have it executed in
. f) f4 |1 }5 n @5 W9 \ // time, we create a Schedule that says to use the- m# q w, \0 M4 q
// modelActions ActionGroup at particular times. This
, ?" G& R1 K" ~- Y // schedule has a repeat interval of 1, it will loop every
/ Q" @" v' z+ ]( _, @ // time step. The action is executed at time 0 relative to8 J+ q7 H) S" r3 C
// the beginning of the loop.
$ S* [) u$ o. ]3 e9 p0 k$ N+ Q6 g1 n+ y& k# K2 d' K2 A
// This is a simple schedule, with only one action that is
8 Z: T# A! c6 P! z/ V! R0 y // just repeated every time. See jmousetrap for more7 m! }3 ] o8 D8 P( k6 v
// complicated schedules.
6 M% q* W u+ j1 b
1 @4 U* [# x+ s# I modelSchedule = new ScheduleImpl (getZone (), 1);
) m6 y- f5 B1 w1 d W' D modelSchedule.at$createAction (0, modelActions);5 T* c9 v" e7 Q9 q0 A
, s- W4 y+ V" k0 b8 [
return this;" a8 Q9 J2 G- O$ m; [
} |