HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. l' s* w& W6 T( w E. G, _8 T7 m( G! j2 @: j) S4 Y% v
public Object buildActions () {
3 } ~: x9 M$ z( i& a$ n3 w super.buildActions();
4 R: E+ a' ]9 g) R5 Z$ j8 U6 O& T ; L" V U! L9 o5 a4 v% T/ w
// Create the list of simulation actions. We put these in" k I2 }* b+ l7 O4 e7 m
// an action group, because we want these actions to be( }" [* _7 {, l9 F, ?* M, b
// executed in a specific order, but these steps should8 U6 p- v* a/ a. h& Q) p- ~. f. a
// take no (simulated) time. The M(foo) means "The message( i2 K9 z4 V# t* t; X/ j' |. \1 ~
// called <foo>". You can send a message To a particular% |% p' [4 Q+ h3 F$ F
// object, or ForEach object in a collection.- d# S w% [) o6 T% l) w
& d6 s2 T9 C m1 R: s // Note we update the heatspace in two phases: first run
z5 \. E9 W, k2 P& \ // diffusion, then run "updateWorld" to actually enact the
! }2 }" a# A' ]. p& n, K8 M // changes the heatbugs have made. The ordering here is, x- w+ c) O) b" s/ B
// significant!% M+ j) \ Q/ E/ n7 Q
3 R1 {( H6 [ }& @
// Note also, that with the additional4 h# ~: f0 U# E" q
// `randomizeHeatbugUpdateOrder' Boolean flag we can' v2 Y- q: R. h8 X' U6 W8 z* Z
// randomize the order in which the bugs actually run" L# B3 D2 r: ^/ @
// their step rule. This has the effect of removing any
0 x L) B$ i, A F" T ~ // systematic bias in the iteration throught the heatbug
$ E+ `% C8 K$ t: M N // list from timestep to timestep
7 ?; J. k1 T9 F- Y
# B& Z( l$ `7 J% t // By default, all `createActionForEach' modelActions have& @% ?$ N M9 x ^- T- Z9 Y
// a default order of `Sequential', which means that the& c) _- J$ |9 K5 c- n9 ~9 c1 ?
// order of iteration through the `heatbugList' will be
6 v! F2 |; _& Q w- H // identical (assuming the list order is not changed* Q N% P9 R) k' M6 F. Z' i3 [
// indirectly by some other process).
1 y1 s7 ^+ R+ V 4 ?5 b+ ?7 ?* ~( K# r/ l
modelActions = new ActionGroupImpl (getZone ());
. ]8 K ~/ w+ x: I( @' r, f# a- G
, v/ ?8 q4 q# t/ m: d! A) R8 p try {( F' P4 V$ _! I! L2 o4 @; o$ `, N
modelActions.createActionTo$message
; W0 O8 ^/ k( l6 [ x (heat, new Selector (heat.getClass (), "stepRule", false));6 d- l& N' u2 X1 o0 e0 [2 }* ~7 \4 O
} catch (Exception e) {
2 S* t: E! r8 r, t System.err.println ("Exception stepRule: " + e.getMessage ());' X2 B: Z" |) c- t& O1 H
}4 ?5 N( g% L" x: `$ y
; X, V6 M o+ B: k2 q try {2 N* L" \9 f5 ]5 T) J8 K
Heatbug proto = (Heatbug) heatbugList.get (0);
7 ^( X# X5 ]; }1 t) [ Selector sel = - D8 E/ Q" k1 Z9 Y9 ^& l* [3 S; }
new Selector (proto.getClass (), "heatbugStep", false);8 J! q% Y* T: X+ M6 N9 h0 F
actionForEach =
3 o: R9 ~- @; H5 j- Y! y modelActions.createFActionForEachHomogeneous$call
8 x, p5 ?4 d+ y! k (heatbugList,! ]5 [, d- u& |1 |3 P
new FCallImpl (this, proto, sel,( i' W9 ~5 F9 C: |' n. a1 @' c# T
new FArgumentsImpl (this, sel)));
- A0 @5 N0 r6 K" e } catch (Exception e) {2 D. h Q3 F( s$ q: a
e.printStackTrace (System.err);
5 m; r3 U( P/ l( A }
4 h! k$ F& L& U' c# d* d , L8 ^! f' C8 `7 t2 t
syncUpdateOrder ();
5 _! K( { I. T6 f: X
7 V2 z' T* u1 y$ ^5 L$ } try {# ]4 _ R- z: i/ Y
modelActions.createActionTo$message
; n" q6 c! Q- q( P% N+ s1 ? (heat, new Selector (heat.getClass (), "updateLattice", false));
; _" f' w; v! u' Q& u& i } catch (Exception e) {' u0 A0 y3 X% C% [3 q7 I* E
System.err.println("Exception updateLattice: " + e.getMessage ());
2 Z2 W, A/ H8 W+ g; e }
: m! s7 S, m+ ~ 4 ^4 N/ E0 u# Y3 t% B
// Then we create a schedule that executes the
$ m! L) { T1 f+ X# h! z$ v+ h // modelActions. modelActions is an ActionGroup, by itself it
9 t' V( w x# s( p$ a' { // has no notion of time. In order to have it executed in$ i- M) F- S Q5 X0 m% |
// time, we create a Schedule that says to use the
3 H" I7 ?; x! j+ s+ M // modelActions ActionGroup at particular times. This+ O% o$ {9 b% m' i y
// schedule has a repeat interval of 1, it will loop every
1 ]' ~; K$ F/ p4 t/ Y7 u g // time step. The action is executed at time 0 relative to
?) n1 V2 z [% V$ O, ~' W @ z3 t // the beginning of the loop.7 x5 S" t& r- i
) f" j) R# N$ y8 f! D! @/ P
// This is a simple schedule, with only one action that is* h0 T: L, C$ x+ N1 G6 M4 s% S; T
// just repeated every time. See jmousetrap for more3 l' Z& K1 N$ g9 r: \+ B
// complicated schedules.' E$ V$ Q- h ~5 g; w
1 ]- S1 \" l# D8 }
modelSchedule = new ScheduleImpl (getZone (), 1);7 }) k$ e* {8 H2 g
modelSchedule.at$createAction (0, modelActions);
3 |2 R. N! w. f c7 d0 Q $ B1 Q- ^5 V: ^: B# c
return this;: k' F2 k& s* D( O3 l+ m
} |