HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 l& O$ c8 z" U$ L* _
8 T3 ], X- |( f# ^
public Object buildActions () {9 ]4 H( W4 ^% R
super.buildActions();% t$ ^$ U$ H9 C; O6 b. N7 U
$ Z, d6 A& |2 o$ p5 |
// Create the list of simulation actions. We put these in9 b6 k5 u2 s$ [# T
// an action group, because we want these actions to be
% M0 d: G; Z7 s // executed in a specific order, but these steps should
# n" n6 e2 E- N4 _, v$ i // take no (simulated) time. The M(foo) means "The message1 R. C) j1 B8 Y$ a( y I6 K/ z6 s
// called <foo>". You can send a message To a particular
3 f) z* h; g: H4 t3 j/ A // object, or ForEach object in a collection.
/ ?6 v* X3 O9 ~+ j$ f' C2 w; X ) J2 l3 r7 {2 M1 ]6 s
// Note we update the heatspace in two phases: first run: M3 f; K" G: Q, ^' e) ]& q
// diffusion, then run "updateWorld" to actually enact the0 n6 u7 R. W* c |% F
// changes the heatbugs have made. The ordering here is: n, ?: \' v% d* D
// significant!" P6 L& R8 F2 r
' n$ N$ e" e- \ // Note also, that with the additional2 E4 z9 w3 @! E
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 h8 n+ D, |1 ^2 J% M- L: [
// randomize the order in which the bugs actually run, X- n( l" r6 q
// their step rule. This has the effect of removing any7 K* O* U/ D% W. Y- d5 {+ B% p
// systematic bias in the iteration throught the heatbug
1 i* ~+ [5 I! R( t2 _ // list from timestep to timestep) {& b Q5 Z9 B! x9 n) z' A0 H& y
$ f* F! G' {3 @& Z# A/ N9 [ N4 }
// By default, all `createActionForEach' modelActions have
) t/ p# s" k* |0 |6 @" E- b // a default order of `Sequential', which means that the
( K9 ?7 ]$ n7 f; C // order of iteration through the `heatbugList' will be# V% ~! M% U Z6 ~2 j
// identical (assuming the list order is not changed' r/ y: Q C3 O, a" |
// indirectly by some other process).' H2 X1 D. o6 t1 d q/ @
' x0 c% P- D6 c0 Z& ~9 W8 \" Z
modelActions = new ActionGroupImpl (getZone ());
# w6 _, }* X9 X( b; x* K
# f# A6 ~6 E8 M try {
* R& H0 t6 O5 i7 B% |2 s, y. A modelActions.createActionTo$message
8 j0 r: ?/ |# s9 L( s+ s! m (heat, new Selector (heat.getClass (), "stepRule", false));& F$ v/ k( O) i+ W6 [
} catch (Exception e) {, d4 h! w) j" Y( b) }
System.err.println ("Exception stepRule: " + e.getMessage ());/ C9 ^) E/ {4 [* P3 R3 e0 X( `
}
5 m4 z* u9 h ~- {
# s- a( A' {& }& K: y try {" K( h# P% P; |% \8 Y
Heatbug proto = (Heatbug) heatbugList.get (0);
8 f# K1 G) n7 w7 ~1 }5 l& u* M/ o4 G Selector sel = 5 d6 u* F" e9 W0 ]& M4 X1 v
new Selector (proto.getClass (), "heatbugStep", false);* i( N! j# T2 P! z, n& {- I
actionForEach =& ^% `* X" b1 ^
modelActions.createFActionForEachHomogeneous$call1 G8 A' i; T3 l- y& K0 S; r K
(heatbugList,
0 M6 ?! N. T2 T; S3 `. H6 N new FCallImpl (this, proto, sel,! k% s6 M( X! L ?6 [9 {
new FArgumentsImpl (this, sel)));
# K3 O" M( ~7 _+ s5 |- m } catch (Exception e) {- L Y+ v2 G8 t) K1 H2 t
e.printStackTrace (System.err);! n- j) s7 U, t8 k$ D8 U
}" u. o/ l) t% m( O; r8 c
' o( D( Z# b- `' s8 V' C
syncUpdateOrder ();! x+ f9 P e2 d2 t% |! |' @
( x( a$ ?6 Z" ~
try {) l: W( v# L. r2 ~7 U
modelActions.createActionTo$message
9 y4 E; K8 L/ Q; i R (heat, new Selector (heat.getClass (), "updateLattice", false));
$ d2 R& S7 \# @8 U4 w- O6 |2 V } catch (Exception e) {
& P( r6 k$ M, d+ |( t System.err.println("Exception updateLattice: " + e.getMessage ());
$ {6 a6 N# |2 g& @5 f }# w0 _6 Y% Q. {
. h. |9 s" f' F7 a // Then we create a schedule that executes the
1 ]9 T0 Y n5 C ]1 ~6 `" @$ @ // modelActions. modelActions is an ActionGroup, by itself it
4 Z9 v8 {8 r! B) }& E; | // has no notion of time. In order to have it executed in, L9 I. c* y9 k3 H' w$ J; A; a
// time, we create a Schedule that says to use the
( P7 l! G3 P0 G# D l. N // modelActions ActionGroup at particular times. This9 O0 A f% M3 K2 H+ F) ]# Z
// schedule has a repeat interval of 1, it will loop every5 o7 S% l7 |" K" H' L7 l* S
// time step. The action is executed at time 0 relative to
. a* D5 J- U5 Q, ^- R // the beginning of the loop.
/ {: U }2 U3 [( C, `' I: C4 x) p B
// This is a simple schedule, with only one action that is
2 [" I. V: T/ d; o& a# m" }1 m* Q/ Y // just repeated every time. See jmousetrap for more1 T1 k0 \9 ?+ N: D. n- _5 n4 Q6 P
// complicated schedules.
' e8 ^ B/ B2 B6 z% x
" k7 v+ y; O6 e9 H9 M7 U7 Z0 e1 L modelSchedule = new ScheduleImpl (getZone (), 1);( l' }& D: K6 ]- p; ^& p
modelSchedule.at$createAction (0, modelActions);
" Z6 k: |+ z& V* ^$ V. _
6 U7 k& Z: ~ h0 X* J/ e return this;
# \1 F$ F6 k0 s) Q% [1 E6 s' X, U } |