HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, l4 Q% e9 Q& O5 r" {( y) z# d- ]$ H; k5 M: B7 W N
public Object buildActions () {
+ I; f2 |) s8 t4 \; r super.buildActions();
9 g1 w2 l5 @! e- _ @ [# r* B , s5 |0 L1 K/ x& ~! G% h
// Create the list of simulation actions. We put these in
0 ]2 Y5 d1 T5 B0 e" l% s // an action group, because we want these actions to be- U8 ^2 ~2 T- I- L: P
// executed in a specific order, but these steps should! o0 Z/ z; z. x [# `, _
// take no (simulated) time. The M(foo) means "The message" ^' G! n- c. C* Q, O( u) I$ u
// called <foo>". You can send a message To a particular
8 O& l/ Z' M! L2 v- N' H // object, or ForEach object in a collection.
- w- p; F U/ M) `2 F: R
' w+ P* v8 v9 W4 V- ? // Note we update the heatspace in two phases: first run9 ^2 a# l7 V5 ~& C) U* _7 y
// diffusion, then run "updateWorld" to actually enact the9 p* V. ~' o: t0 O. i2 ?+ w
// changes the heatbugs have made. The ordering here is4 F" {. N) t' ^; G. i1 T9 }
// significant!
( s( Y/ z% V9 d, j) i+ z ! M) m0 M2 r4 P) f/ r7 s
// Note also, that with the additional8 A1 k) M# g% ^1 ?" z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% A+ D1 H' X* ~* j6 x // randomize the order in which the bugs actually run
- E l, x- @$ x9 j // their step rule. This has the effect of removing any
& l" g- X' a9 l/ w9 u% v! \ // systematic bias in the iteration throught the heatbug5 y2 S5 C5 n% `' y0 A3 A8 I& D( ?
// list from timestep to timestep
* C4 g2 k2 w$ l8 M }5 P8 R; \% @8 \
// By default, all `createActionForEach' modelActions have
7 K7 ]6 }' f7 X7 y // a default order of `Sequential', which means that the5 h4 @; m3 p3 G9 _) N
// order of iteration through the `heatbugList' will be
/ r; @, o. |3 E+ b, L1 Z // identical (assuming the list order is not changed
! {3 x0 A( o) E2 J+ T% e4 J, m // indirectly by some other process).' B& l$ w) e S% j* }7 t F
! z4 T9 b% d5 W6 z
modelActions = new ActionGroupImpl (getZone ());" Q# y) @0 h/ B( R; ^
8 l- g& G3 t$ ~4 f6 Z
try {; {, U$ u/ ^& ^% n8 h0 G
modelActions.createActionTo$message- S/ X6 {. b* T' m, _
(heat, new Selector (heat.getClass (), "stepRule", false));; S) k! g2 u( A6 _& ?: z* j* k! Z
} catch (Exception e) {/ e7 D2 R) W: a& o! {; J
System.err.println ("Exception stepRule: " + e.getMessage ());
! u& F1 S4 ^! F' J! }# ?- `0 @9 D* A }5 c, m4 }! h" e4 r0 c, ?6 T
! }5 w, Q8 @& H4 X: u7 @
try {
/ X$ {0 o9 W1 T% f Heatbug proto = (Heatbug) heatbugList.get (0);
+ R& m, ~+ e/ Y Selector sel =
1 ~8 u& _: ~$ j new Selector (proto.getClass (), "heatbugStep", false);
- c: H% X* f) Y. [ actionForEach =0 o" W0 k5 a! n* m5 v8 b
modelActions.createFActionForEachHomogeneous$call0 j; e/ b8 U! q1 b/ i
(heatbugList,/ A2 {8 H0 O/ d8 W0 e
new FCallImpl (this, proto, sel,3 j4 d f |' L8 C, F" k7 W3 ~/ k
new FArgumentsImpl (this, sel)));- n5 ]3 i+ i/ @! J- Y$ P. B
} catch (Exception e) {3 W* @4 l, G/ r3 H* R( s
e.printStackTrace (System.err);- T" d$ z' Z6 @. O1 p* x
}
( O2 o' m$ L8 }% m( {% l m
, n& q7 a0 Q5 z; o8 m syncUpdateOrder ();; N5 @5 x4 ^- h, u( _8 P5 k! ]' a
/ z4 A) @' w: X- W& W try {1 r% h( @% L5 v Z# x
modelActions.createActionTo$message
0 W/ G* D! z+ o (heat, new Selector (heat.getClass (), "updateLattice", false));1 V; |6 u/ b* {" c* P" T$ c
} catch (Exception e) {
# ^" K" `* I$ u2 c. e System.err.println("Exception updateLattice: " + e.getMessage ());- |, z- z0 t1 S, G" x$ l0 h( R$ j% ]
}- K5 Z* m7 \' z) B
3 l7 C% I! P3 Q% _: F1 | // Then we create a schedule that executes the4 w; ]9 l% d# h+ I y% o( z# M+ W
// modelActions. modelActions is an ActionGroup, by itself it
. J( N# k' j$ F, _5 N6 q) e // has no notion of time. In order to have it executed in
% c0 ?+ z, t- k // time, we create a Schedule that says to use the# ]1 W; F I" t: n+ L
// modelActions ActionGroup at particular times. This3 u" N: O8 |& @) g
// schedule has a repeat interval of 1, it will loop every! B4 H3 O' e, r q6 r8 C5 A
// time step. The action is executed at time 0 relative to
0 r+ _/ j# c$ Q$ {! l* z1 Y // the beginning of the loop.: G) d0 i7 }+ k9 D+ K
, [& {4 d2 \ m( D @, W+ B% R- ?
// This is a simple schedule, with only one action that is
! J6 W4 t. \4 ?: @3 J/ ` // just repeated every time. See jmousetrap for more6 [% v R# s% _- p
// complicated schedules.# R; h$ b' Q. r$ U, \# W& F: i& `% j
- y! c* }. a9 ^8 v2 { modelSchedule = new ScheduleImpl (getZone (), 1);# o: \1 J$ F+ ]2 A
modelSchedule.at$createAction (0, modelActions);: [" g* N$ r& M) o' ~
/ k8 ?* i& {/ i) X7 F/ ^ return this;
9 M" H' E4 c. ?6 W } |