HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ K& e, `! h+ C3 d
$ z9 X7 m& M- { public Object buildActions () {
; s6 {3 w) f" S super.buildActions();+ ?0 J2 O3 b; M" y* C4 Q' m
4 U7 ~% S# p. E% z. i2 \ // Create the list of simulation actions. We put these in
& J% L, [' O# y, }2 M8 @ // an action group, because we want these actions to be; u4 z: I! V5 I3 [3 g, P% G1 ?, h
// executed in a specific order, but these steps should
, s" s2 }& ?2 x' y // take no (simulated) time. The M(foo) means "The message
9 p6 L; P3 @0 p) v( x1 |8 ] // called <foo>". You can send a message To a particular
- U6 z, X4 k9 b& q6 n; K // object, or ForEach object in a collection.. t, u- z) ?+ {. C) g) V1 Z
! U% w0 r0 I) m/ A, x7 ^
// Note we update the heatspace in two phases: first run# h) y Y9 n! H. h( G$ f7 z
// diffusion, then run "updateWorld" to actually enact the8 @1 T5 e, Y+ @
// changes the heatbugs have made. The ordering here is. B$ d! {( x7 D& n. l
// significant!
+ k; F% v7 I' r4 e
) F5 B# P" F/ X1 t3 x# b // Note also, that with the additional
$ i6 q$ r$ `5 `8 b$ B // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 j* x9 ]* [1 p( ]1 s. u9 G; A& p // randomize the order in which the bugs actually run
3 Y" H! ^) q5 V/ L- l // their step rule. This has the effect of removing any
' l4 X2 T9 q% x" s5 N" N( P, @% c // systematic bias in the iteration throught the heatbug
4 I( x/ {8 Z5 s* r! | // list from timestep to timestep, r6 K/ }' n) k" E
; ]) S* K; D% R! E4 q! k: T
// By default, all `createActionForEach' modelActions have
8 T% h9 J: ^% \/ R# u // a default order of `Sequential', which means that the
8 Y! ]! m4 n* q" i& | // order of iteration through the `heatbugList' will be# B2 w: `3 C' Y6 K4 [
// identical (assuming the list order is not changed
& F( [: G T9 p( j1 q- J& K: k // indirectly by some other process).
$ h& j Q0 V! u
* u4 e% g8 Y1 V y3 a3 Z2 \% l: W modelActions = new ActionGroupImpl (getZone ());) {9 O; @% H" w- ]4 Z6 e2 ^
4 T. R$ U' U. L+ w0 g
try {
" E }4 P0 O. h! ? M modelActions.createActionTo$message" G! J! D: C5 |
(heat, new Selector (heat.getClass (), "stepRule", false));/ `2 `+ K; G! w4 I9 t
} catch (Exception e) {
5 d V7 j' D* T6 i& B4 X, ? System.err.println ("Exception stepRule: " + e.getMessage ());; D5 c) h6 Q' l" ?9 h2 F0 ~9 c' o' Y
}* Z: ^* b5 _7 |9 F. m% ]
) |1 m! l3 s5 K: z8 C try { @( L0 m) N/ @* i6 T
Heatbug proto = (Heatbug) heatbugList.get (0);
* I1 q* J6 j& y; ^ Selector sel = 0 l5 o( \+ m6 L: C% I: r- x
new Selector (proto.getClass (), "heatbugStep", false);
6 d& x0 E8 Y3 F5 ]9 e7 A; o) N7 P4 ^ actionForEach =- |2 {5 X4 ^: S* G; f. Z
modelActions.createFActionForEachHomogeneous$call+ N+ l& E7 U2 w3 O1 O4 y
(heatbugList,1 T1 c6 i! _1 \% S
new FCallImpl (this, proto, sel,/ \- M' j4 H- B3 ^
new FArgumentsImpl (this, sel)));
6 n+ e* Z0 q9 R/ S" X } catch (Exception e) {
$ X: P2 V' L& e' c& K& C8 [% m e.printStackTrace (System.err);
. i; X1 B3 m) @, ? }
6 e, i4 d: G7 e( F) I , ?8 a; R# x. t& O) w) L; K
syncUpdateOrder ();
7 Z% L( n; ]& d. U' V! M9 `4 ?' }, G% I7 I* ~
try {
% Y3 s7 B; a+ ]) q+ H( N8 p modelActions.createActionTo$message
# X6 Z7 G$ V7 V" m. }. b0 O (heat, new Selector (heat.getClass (), "updateLattice", false));# g% N4 `% ^! K6 g% x8 i \$ }
} catch (Exception e) {
$ ]- k$ O0 P# y! b! V System.err.println("Exception updateLattice: " + e.getMessage ());9 v. o+ b8 Q; ^. u4 d& U- T/ w' D
}
: t4 q5 \$ i& i5 a: |9 p 6 o" T( B% @( d9 v6 E8 j
// Then we create a schedule that executes the6 M$ s) W7 v0 X D
// modelActions. modelActions is an ActionGroup, by itself it
1 _, {7 u# C* b4 d/ `8 v // has no notion of time. In order to have it executed in) X% A; Y, M: m* W- }3 U T
// time, we create a Schedule that says to use the
& M, `0 R4 t% j3 w4 i: { ^ // modelActions ActionGroup at particular times. This
3 [' U. X: x" m$ Z // schedule has a repeat interval of 1, it will loop every
& |$ F% J4 O# t // time step. The action is executed at time 0 relative to9 R! _0 ]! I# m, a
// the beginning of the loop.8 h9 h! r, N! l7 C4 m
( y. P% Q6 b, Y# `* \ // This is a simple schedule, with only one action that is$ U- [8 C; u; [; O
// just repeated every time. See jmousetrap for more
q- N( T5 w) f // complicated schedules.; I, G0 F" j; S' n% n+ M) T
2 J; `0 J! A9 C( f* Y6 H* B modelSchedule = new ScheduleImpl (getZone (), 1);: i, E# |, I/ v/ R1 j
modelSchedule.at$createAction (0, modelActions);
& p, }; ^" g5 M# P# g3 O% p) h
; }) ^8 Y( C" M: W return this;
, b" k- |1 ~) N+ c- ^( o' O } |