HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" K) R/ s- `1 g9 R+ f* K& } J" I b: O0 G& _6 a* d! R0 v
public Object buildActions () {* j4 Z8 F; R1 T/ {2 h4 k& m
super.buildActions();
! T8 p+ p( R! T& ~: h
/ E; K$ l9 r0 @( I2 K3 C1 r // Create the list of simulation actions. We put these in a7 q1 U0 t m j! ^# U1 k
// an action group, because we want these actions to be5 \/ i# Z- z2 a3 |+ V+ _
// executed in a specific order, but these steps should
5 ?9 B$ D% z7 c2 q( Y, A // take no (simulated) time. The M(foo) means "The message
. D4 p9 B) X" q3 R' A" n/ {/ e // called <foo>". You can send a message To a particular
" M; ~3 ?5 @/ e) k // object, or ForEach object in a collection.5 @8 {$ ^5 k, q3 O
1 q3 J, o5 t( y6 a3 }
// Note we update the heatspace in two phases: first run
, b& d; _5 i' ?( c$ a, q // diffusion, then run "updateWorld" to actually enact the
3 d1 N% E6 l2 I( i# m // changes the heatbugs have made. The ordering here is1 E+ w( ]6 p5 C2 z- {' W
// significant!
5 V e' x) ^: c+ F$ T1 n
; ]$ @$ ?: ^5 M _: N // Note also, that with the additional0 [: ~" @6 x7 `7 E3 _8 q# b
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 g1 ]6 q3 ~" ]/ O& o
// randomize the order in which the bugs actually run$ R- s' p- O& m, r
// their step rule. This has the effect of removing any
: r- ]3 F7 X5 R! @ // systematic bias in the iteration throught the heatbug; ?# K5 I0 `. q0 e$ W
// list from timestep to timestep) h* B0 n R! d3 ?( s: r3 E7 h
+ q7 i& k- c; ^ // By default, all `createActionForEach' modelActions have
) B: a- P7 |: B! N! I' X! l6 N2 ? // a default order of `Sequential', which means that the4 H, t5 W& S) g/ r
// order of iteration through the `heatbugList' will be
2 v# ~' d- I0 D( O) e. i // identical (assuming the list order is not changed) k* c9 T' W: o0 m- V% Q3 k4 O
// indirectly by some other process).
, v6 w- {6 z3 |: h( E2 U9 h6 Z; v c 9 i8 u! B1 ^" Z/ Z* E' W- ^
modelActions = new ActionGroupImpl (getZone ());
& C3 k) B& a& L5 `! [
% V: o( ^6 N: k9 I5 v try {- x K* f! r$ D. {- \ A$ l
modelActions.createActionTo$message: Z% v5 F1 m3 m# b9 a- V) e' M- ^; v
(heat, new Selector (heat.getClass (), "stepRule", false));! q' A2 R5 Z& a; @
} catch (Exception e) {
! y( ~& s0 S* V System.err.println ("Exception stepRule: " + e.getMessage ());% R" d# V# G$ q! s! S+ P/ J$ c
}1 \ J& P B+ M: x, [
- c* \% b) f2 y, w try {9 O. C# |$ A$ {
Heatbug proto = (Heatbug) heatbugList.get (0);0 Q9 t9 R# `3 v# h. F! `8 @
Selector sel = Q7 P& c$ _6 [: h# P6 @
new Selector (proto.getClass (), "heatbugStep", false);$ `/ P0 c2 F# D3 j
actionForEach =
5 B( i* {) X* m0 x: q* T modelActions.createFActionForEachHomogeneous$call
1 J& ?$ P9 O& g% |* `' ? (heatbugList,
% ~) V6 {) |' p* m7 I; \ new FCallImpl (this, proto, sel,
q. d4 A9 w! z/ `+ ?0 D1 y new FArgumentsImpl (this, sel)));* n# o2 ^$ _* P5 ]2 M) r! w
} catch (Exception e) {
7 A u* b# p( A6 ?7 R# a2 u: k e.printStackTrace (System.err);1 a* @, t, T- ~# a5 [6 h
}; K, _( {& b; k( D* v! u
5 v! \6 v+ I" c
syncUpdateOrder ();
3 V- e! `8 e! B( h# ]2 d
* ]8 c% E& b: Y8 f. E try {. S- `$ B, r9 G2 f
modelActions.createActionTo$message 7 \7 s V+ r6 q4 q5 c% k* E: V
(heat, new Selector (heat.getClass (), "updateLattice", false));
' W) T# _& W3 O( X# q, ~7 h) B } catch (Exception e) {% r4 M6 R: w) q) \; O1 u
System.err.println("Exception updateLattice: " + e.getMessage ());
4 T" c8 q7 f: K* q6 Q1 b- ~! j% J9 j }7 g2 ?, r& f( k
/ @4 ?: G, C) ^' h' z' ]
// Then we create a schedule that executes the% N3 w4 C6 l& p5 @
// modelActions. modelActions is an ActionGroup, by itself it
) f% [) r0 `" |" y( }. z- w // has no notion of time. In order to have it executed in
2 \# x" w3 p9 a+ u9 a // time, we create a Schedule that says to use the; Q) ~7 C4 c3 h, V' f3 e: b) p* g
// modelActions ActionGroup at particular times. This5 ~8 ^1 C& F6 P# x$ a7 D
// schedule has a repeat interval of 1, it will loop every
9 A) X6 w2 a$ D$ v; b& B/ t* o // time step. The action is executed at time 0 relative to
: A8 Z6 u6 D$ N5 a0 I) I // the beginning of the loop.# x0 `) j/ B1 z B( a: A8 t
- {) K& |% v G- n. D6 h
// This is a simple schedule, with only one action that is( M- W; d* p v/ }+ k
// just repeated every time. See jmousetrap for more
5 @! ~& V- p* H // complicated schedules.
6 ~; g# G* ?1 u. f. z V5 l
# K; D: @6 y: O! \( H o' l: ^6 P modelSchedule = new ScheduleImpl (getZone (), 1);3 x4 K: R6 m: B( \
modelSchedule.at$createAction (0, modelActions);- r" X; b, A7 `: a/ W
, P9 q- v! J5 @# d G" R" O* J* D7 K return this;
0 V4 N# H! k# G' q; l9 j. m* v9 q } |