HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 f, y* n- }) `0 ]2 r& b ~5 a
- v, ?) ?- ^. ]9 S B0 n public Object buildActions () {
/ G. f9 ~# [$ @ ~$ n' P super.buildActions();
& X6 b1 c/ \9 R. x. A
( Y7 [, W5 f7 X {5 g" V // Create the list of simulation actions. We put these in
' A5 Q# n, [, ]! x; }* \2 ^4 r: u1 W // an action group, because we want these actions to be
9 Z8 Y! j+ B/ O9 A6 b/ l2 X$ C# Y- e // executed in a specific order, but these steps should5 I6 O, R1 v0 J8 p: U, N
// take no (simulated) time. The M(foo) means "The message( U3 ~+ c! i: |4 G% y6 q% o$ e
// called <foo>". You can send a message To a particular
$ r. M }7 q: a5 W7 L // object, or ForEach object in a collection.0 {+ r# ?* g8 V, [/ n4 A% A. P
' ~; r) X1 j& y( D6 j9 `
// Note we update the heatspace in two phases: first run
9 b+ ?4 D1 e J' q& B; d0 W ? // diffusion, then run "updateWorld" to actually enact the
; s$ ?$ _( @ X4 N6 U) U // changes the heatbugs have made. The ordering here is' D; ^, n& G3 b8 [% B7 Z4 O
// significant!
+ Q; C, }1 r8 ]. l% e" O " t3 f$ M$ n3 q( d3 R
// Note also, that with the additional* p. c: J+ |. i$ a2 j
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 e7 {2 p, R+ g8 c
// randomize the order in which the bugs actually run7 z4 n: L2 R$ Q3 E
// their step rule. This has the effect of removing any
3 f% f: T. Y9 a: n7 r. F // systematic bias in the iteration throught the heatbug
0 m! {$ X( @9 J( _9 o7 U4 h // list from timestep to timestep0 s* e* _. {# M, n/ q; Q
' e$ W# q" S7 |4 |% |
// By default, all `createActionForEach' modelActions have
! [( L, n; b( S- J! W // a default order of `Sequential', which means that the5 T4 U ~* x+ U( W' S2 b" v
// order of iteration through the `heatbugList' will be
/ k$ p) s) ~1 [* t! V' o // identical (assuming the list order is not changed
# [( H) Y- l8 K7 n // indirectly by some other process).; c; e8 w4 z( Z/ O
, x7 J2 d* Y" b0 y5 ]* B( J0 r modelActions = new ActionGroupImpl (getZone ());
8 h% |' V j. e5 u5 G# v S* h
2 ]$ @& Q- e3 }, _' x5 S# J try {
( H9 S' S: k' P+ V: l% s modelActions.createActionTo$message- E& Y# g; b6 H1 w* I0 M+ y1 _+ R
(heat, new Selector (heat.getClass (), "stepRule", false));
- P8 \1 [8 Y2 {+ W8 P9 N% G& W } catch (Exception e) {# n. X7 q" E! [
System.err.println ("Exception stepRule: " + e.getMessage ());
+ [5 u8 a) |% D, r, t. u }
' j6 R. z2 ^6 y& T
: |' ^' R- d6 f9 v- W* @ try {- d v" g- M$ u7 P- \5 S/ ^
Heatbug proto = (Heatbug) heatbugList.get (0);
% p7 @% f; t7 `, D- }3 g# m- G/ e# M2 v Selector sel =
; T& `: Z! O8 x1 o: y: f new Selector (proto.getClass (), "heatbugStep", false);; Y" a! [+ ~3 d
actionForEach =
{# @+ e ^& N/ _ Q! i modelActions.createFActionForEachHomogeneous$call: |" B5 _! u6 h9 A
(heatbugList,
* B* Q9 x4 |+ C- o! F; M1 _ new FCallImpl (this, proto, sel,
, I& ~# q! |2 Q& s1 G5 F new FArgumentsImpl (this, sel)));5 M5 z9 ^7 I5 _+ @+ ^
} catch (Exception e) {
9 M5 F4 C# i' D" u( | [+ A% x e.printStackTrace (System.err);! i, I# @5 c; G9 W
}
9 q4 L# M5 W2 p6 h/ C
1 B, _! s( g+ T+ Y. _+ s syncUpdateOrder ();6 R8 R, F9 [( z5 X' w6 R; }$ x
1 l- I/ C+ e5 E+ i0 z, p, e& m try {
; \2 @; f9 Z& ?: z. M- ?# O modelActions.createActionTo$message O( T$ ?$ S1 |0 C5 L% E
(heat, new Selector (heat.getClass (), "updateLattice", false));
, r* t! @2 D# s& y( ^6 \ } catch (Exception e) {) ?$ I' @" M$ w1 A1 S
System.err.println("Exception updateLattice: " + e.getMessage ());
& N. j4 m7 e8 F& k* e8 \ }
' O+ z: d! a% b) c' e / a: C, Q) E; {& k$ N
// Then we create a schedule that executes the3 g- n4 a) l' S
// modelActions. modelActions is an ActionGroup, by itself it
: O6 m, J; B4 J2 n8 a ] // has no notion of time. In order to have it executed in
" E8 w' z D; ^5 G // time, we create a Schedule that says to use the* }0 F: {+ G0 t$ O: y
// modelActions ActionGroup at particular times. This
- P% h) M: ?1 z, | // schedule has a repeat interval of 1, it will loop every
2 _8 w4 M$ K' Q/ c' B // time step. The action is executed at time 0 relative to
3 g+ ~" E. n$ C# b // the beginning of the loop.
% f. [* c0 f4 }% y3 E* {
! V8 D/ ~$ n* ?3 Q // This is a simple schedule, with only one action that is
4 \& q& C# ]7 o) L% h/ p8 L- v // just repeated every time. See jmousetrap for more3 C' G& C2 N( c5 m1 B
// complicated schedules.0 v/ u8 t4 J* u Y
2 b1 b2 h% j- {1 K modelSchedule = new ScheduleImpl (getZone (), 1);8 Z0 Q0 o+ P* {5 o
modelSchedule.at$createAction (0, modelActions);
- {6 m2 G% Z9 W$ t9 L% H 6 A4 L$ g5 D& O1 J+ E2 _, V
return this;
: c- p, J+ G0 q- c1 B% T+ u } |