HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 _/ j" @+ a& p) Y9 o' D
% K% _( j: J& U, j! e4 t' }: Y public Object buildActions () {" Q$ ^) O2 M/ O6 l
super.buildActions();
/ Z6 h# X: g3 g
+ ^% R% Y M' A2 q- n // Create the list of simulation actions. We put these in
% r1 \; E- [9 O% X0 l // an action group, because we want these actions to be' u- b5 z/ l, M7 A3 `
// executed in a specific order, but these steps should
+ k2 v8 ~, W& X0 J // take no (simulated) time. The M(foo) means "The message/ w/ y) J' g9 c5 c+ N7 q
// called <foo>". You can send a message To a particular
- I: ` G) C h8 x, N4 e/ u // object, or ForEach object in a collection.
" G. L3 d5 j7 }) i) p, @ d$ H / [) a; s7 P: u. V" ?& N
// Note we update the heatspace in two phases: first run
/ r, m# q4 D: u( m4 K! Z // diffusion, then run "updateWorld" to actually enact the8 r/ R- s( `* ^
// changes the heatbugs have made. The ordering here is# d& ]/ ^: ~: W3 H2 d1 i+ T
// significant!
7 M1 C8 m! n+ w& m8 Z$ E
, W9 Q' g' ^; v ~# F2 t // Note also, that with the additional
2 a6 r% _$ s6 k" G- }7 ] // `randomizeHeatbugUpdateOrder' Boolean flag we can1 d: B) S" r6 }, d$ O
// randomize the order in which the bugs actually run8 i5 l' \* b5 K7 B3 Y$ g
// their step rule. This has the effect of removing any
! F1 d: M8 B* T2 O: s0 U // systematic bias in the iteration throught the heatbug
; \8 N# W: w1 s/ j1 T" i9 v" ? // list from timestep to timestep0 K, S/ L. ]+ o
2 r: f, X% Y' I& `
// By default, all `createActionForEach' modelActions have
: {4 b) `+ H: k7 J // a default order of `Sequential', which means that the$ @- b* e5 ?/ F
// order of iteration through the `heatbugList' will be$ Y% `9 j4 q! D! y: z- U: {, ?
// identical (assuming the list order is not changed
7 F" C' g( v% u' O, b" z: Z. _ // indirectly by some other process).
$ u- i7 l' C0 L+ k % a1 P: I- A; N: n: Q
modelActions = new ActionGroupImpl (getZone ());# h5 t. J) n6 f8 [& Z4 m
2 Y1 K. O) W8 ^; H0 T, y
try {, K1 R1 p O9 C) ~9 o
modelActions.createActionTo$message- r. }! I- y7 i# c& l
(heat, new Selector (heat.getClass (), "stepRule", false));
# B# m# h2 E/ X: E% {8 _ } catch (Exception e) {9 x* B3 v( {- a2 _% } k
System.err.println ("Exception stepRule: " + e.getMessage ());
; q+ W" g4 e* f3 G7 S }
+ ]6 D& b" N2 w$ n5 e, Q* ~& x$ d) i3 p" P1 ?$ Y
try {
) U- z) I8 a2 E) E$ t Heatbug proto = (Heatbug) heatbugList.get (0);
8 y& B2 E' v# ^* p, _' F8 l Selector sel =
0 _# ^' a o, z/ h( Z new Selector (proto.getClass (), "heatbugStep", false);3 w! T' M( q6 Y7 l' ?1 E1 m
actionForEach =
4 P, M2 p7 p3 J3 x3 \4 X0 n8 S modelActions.createFActionForEachHomogeneous$call' B- t: h& L# i9 B) n/ E5 t" X' z) n' ^
(heatbugList,1 J! _+ O, z" x4 t! |# U3 e3 h0 O- z
new FCallImpl (this, proto, sel,0 A: V0 u0 |2 T# B
new FArgumentsImpl (this, sel)));
. S4 t9 w+ q1 O } catch (Exception e) {3 D( O' F" _( M2 ]- j
e.printStackTrace (System.err);! \. z$ m9 E* ]* g- o1 a
}
9 k" ]+ ^$ j: H$ ]/ k# q2 a
3 G9 E) T9 Y& e syncUpdateOrder ();
6 f' C, F! Q k9 V! ?
6 ~: B+ k8 H2 p- W/ ] try {! `+ t) u3 H! ?# z0 Z- d! }8 E
modelActions.createActionTo$message
: ?8 ~: o5 D1 |1 } (heat, new Selector (heat.getClass (), "updateLattice", false));
; u; i# H" j6 K+ [" R1 a/ @2 @$ ^$ @ } catch (Exception e) {
! d L& m6 ^$ t! u4 l2 O: A1 Y System.err.println("Exception updateLattice: " + e.getMessage ());
: T2 d$ t0 b+ t7 B5 J. E( Z }
& ?4 g5 U4 L8 c& g1 n# b# Y1 j$ H6 p V% x* z) S4 ~5 X6 `" c1 B! `$ h+ X
// Then we create a schedule that executes the
) `, D: w/ H J" v' I2 l // modelActions. modelActions is an ActionGroup, by itself it
( B4 N8 z: R9 s. _. C) n // has no notion of time. In order to have it executed in- A0 n* r4 m; h% v
// time, we create a Schedule that says to use the
- B2 V* K; s0 c+ Y1 | // modelActions ActionGroup at particular times. This
. h9 p* p& e# `8 N1 O // schedule has a repeat interval of 1, it will loop every
/ S$ h0 g; N* x$ ^8 d // time step. The action is executed at time 0 relative to
5 p8 T; P& R0 J, K // the beginning of the loop.
1 g* H9 J8 l3 [
0 D; m- E. W3 Y d9 f- a. F( Y) M9 [ // This is a simple schedule, with only one action that is- A6 W" t7 r( u# b" z
// just repeated every time. See jmousetrap for more
/ F+ j0 l9 }) T1 D D // complicated schedules.- b% [' E$ h5 \! o
2 p8 G- L! k) x8 W modelSchedule = new ScheduleImpl (getZone (), 1);
s3 H" C T. m D4 P, s modelSchedule.at$createAction (0, modelActions);
3 p8 O0 _; J! u" F8 M
' Y$ o5 D* | S3 e" c' e. w ~" v' d return this;+ [: ~9 ?; t! w' ^5 K/ q
} |