HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& K+ p, ~( R5 D2 W' {+ v. L, p
6 ^1 C: p. N: @1 ]/ a) U# h9 g
public Object buildActions () {
- L2 X% a; O0 m. o6 w, U- W/ K super.buildActions();
7 R" d7 y7 x g7 H2 [1 B7 Z
4 K- H5 M/ G5 t D8 s$ i // Create the list of simulation actions. We put these in2 N# z1 R8 E7 h! v
// an action group, because we want these actions to be3 L3 C" _7 z, B; q% m. b g+ D7 j6 C
// executed in a specific order, but these steps should% w6 F; G8 X& R' F
// take no (simulated) time. The M(foo) means "The message
9 v- {2 U3 L6 _* Y# _: W0 H+ J1 o // called <foo>". You can send a message To a particular* I ]" Q" D8 J4 }; [
// object, or ForEach object in a collection.
$ ]4 U- m+ x1 k! t" w+ L; W5 \ , Q$ _% I; c) l+ n% v6 b
// Note we update the heatspace in two phases: first run
' j& B% b0 \3 k$ O; w" g // diffusion, then run "updateWorld" to actually enact the
! P8 S$ ~ m$ l2 L // changes the heatbugs have made. The ordering here is
5 V5 ?( j5 b. V! \" c1 r | ~- k // significant!
8 Z7 C4 b3 P2 | % c* l' n' d) ]
// Note also, that with the additional
! f, o5 Q3 K/ P \* @ C // `randomizeHeatbugUpdateOrder' Boolean flag we can
( o8 ?9 U" T7 f9 F0 Z // randomize the order in which the bugs actually run8 H* z, M0 N, N, k
// their step rule. This has the effect of removing any
& v6 u @. ?( x2 @! u // systematic bias in the iteration throught the heatbug& N' X8 O0 Q% D, f8 X3 v, h- Z0 s0 Z3 \
// list from timestep to timestep
6 ^# x# }; a( R% p+ i 7 o% O8 m0 ]4 `4 F0 s
// By default, all `createActionForEach' modelActions have
4 Z" F9 O2 V" k/ o0 ^0 X5 k# c // a default order of `Sequential', which means that the
+ K) z6 T* ]2 u/ f; j // order of iteration through the `heatbugList' will be @4 M3 c# @5 D' H* a) L
// identical (assuming the list order is not changed$ C$ Q9 ^! U1 k+ s2 B; j1 ~
// indirectly by some other process).2 }! \+ `$ D, g
4 D/ J9 q! }+ R! M4 n7 Y, ^ modelActions = new ActionGroupImpl (getZone ());
2 v- R6 Y/ y' u7 X
5 A9 S3 T3 l8 u9 U: Q" \; x& v try { ` a) M, d$ f' }2 ]; E
modelActions.createActionTo$message) j, Y& A" P) a. e4 O, E
(heat, new Selector (heat.getClass (), "stepRule", false)); t2 A. u! r/ O( J6 `
} catch (Exception e) {
- T* o( l9 Z5 E: C% S& X System.err.println ("Exception stepRule: " + e.getMessage ());& Q& v' O' w2 Y3 W* o
}* a# x8 ~* e6 F9 m! H* g
% ?3 Z0 N- d+ g$ [$ U' Y( T# U
try {
# P9 O) d6 b5 P- U5 |5 P* C. y. N Heatbug proto = (Heatbug) heatbugList.get (0);
5 _0 Q. {" b, ? Selector sel =
' ?6 r) u( n0 ^. O) ~$ N( g$ H8 U new Selector (proto.getClass (), "heatbugStep", false);! j+ L: i/ N: N; i0 Q2 ]
actionForEach =" @; K7 F, ]# C
modelActions.createFActionForEachHomogeneous$call% |- b7 ?6 \8 O0 o3 l
(heatbugList,# b& ?1 Y* s) I0 @. ~
new FCallImpl (this, proto, sel,
: c! O9 ~3 ?& |# J( ?* g0 e new FArgumentsImpl (this, sel)));3 N+ R0 `* w. G2 N1 Z) ]$ V% k& @
} catch (Exception e) {
2 [/ R! C1 W+ M* j- ^ C e.printStackTrace (System.err);
% l- e% H; v9 F, n% L" m! E }
& }: t" c% x. t- f6 H% n% a" | 9 m T4 U6 |. Z7 n6 Y7 Y
syncUpdateOrder ();
$ ^7 b' M; R9 H3 w* { R5 u2 a
4 V: ^3 z# e& y! Y try {
4 a8 q% l2 d$ m: D4 U6 a modelActions.createActionTo$message
8 k F( w) z) z' Q) A- o- e( M (heat, new Selector (heat.getClass (), "updateLattice", false));; `1 X' b) S1 { ]+ R4 B: i
} catch (Exception e) {
% Z2 [" F7 P! ?: [7 j# R$ G System.err.println("Exception updateLattice: " + e.getMessage ());/ z. ~" g' O2 i) N( Y; `
}6 ~; t* i1 L% r& Y' ?( b4 s' y
: e% r7 h L, }. V2 M$ z% A
// Then we create a schedule that executes the4 x# V8 Z; G- F! ~8 V- l7 S
// modelActions. modelActions is an ActionGroup, by itself it
, T: H$ {; q; j- X f' {7 ~ // has no notion of time. In order to have it executed in5 | s) E% H9 B! s% e5 i# P
// time, we create a Schedule that says to use the6 p n6 O4 F, _# \4 r& N
// modelActions ActionGroup at particular times. This
/ h5 z" G# u. u$ e% j! c" x) O9 ^ // schedule has a repeat interval of 1, it will loop every
2 |6 D' }( B, N // time step. The action is executed at time 0 relative to S* ^5 L, }# w9 C7 V4 D2 d8 k
// the beginning of the loop.* x, D* Z: U" K0 q( _9 E6 q, j
7 W( D2 M3 |6 d; R) h6 o // This is a simple schedule, with only one action that is
" f# i7 J4 Z6 K% }" g& [0 ~5 U" } // just repeated every time. See jmousetrap for more9 C9 h- m$ I1 `/ \: ]
// complicated schedules.4 W+ |6 G9 {8 A- X2 R& ^
3 ` c2 ]" i+ w2 l6 f- a
modelSchedule = new ScheduleImpl (getZone (), 1);
; Y! C* o5 W6 V% w* m( V# @6 w. t modelSchedule.at$createAction (0, modelActions);. ~% |" }6 D3 p
1 X( t5 H' \7 r5 Y. J
return this;
0 S; f9 \4 x) I9 V } |