HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; A o6 F Y$ f1 L, R F
8 e7 c" [5 s3 P: F! ^
public Object buildActions () {
; ?% n( y6 P( B' _ super.buildActions();
$ }) D E$ s3 H+ l( N! v( D5 ^ 6 N5 o8 e N5 q1 r, @0 Y
// Create the list of simulation actions. We put these in1 K" p0 x* v& K& I- n
// an action group, because we want these actions to be
1 Y2 r8 T( v9 V7 g // executed in a specific order, but these steps should( H" @& d: I$ {6 C$ g( T7 K& T/ ~
// take no (simulated) time. The M(foo) means "The message
# {- S: h6 U& l // called <foo>". You can send a message To a particular
4 N+ w1 t3 s0 ~$ y // object, or ForEach object in a collection.
* [) X, q s+ X
7 N( ^7 R- X* Z2 s0 M. Y6 ` // Note we update the heatspace in two phases: first run$ a( H1 a7 f; X( L# U }
// diffusion, then run "updateWorld" to actually enact the
2 X+ C% R# v7 y // changes the heatbugs have made. The ordering here is" X2 \0 Q9 [' z- _
// significant!
+ [* w2 G% [' A; \6 m
# n, a. c, ? W# s) r: Y% ?8 r // Note also, that with the additional- i" P1 F5 _% [9 w2 @
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 {. W5 g. e2 h; g- D // randomize the order in which the bugs actually run$ Q% _1 {- s0 e) Y! u% X) ^
// their step rule. This has the effect of removing any: L1 Z7 l& k; W1 x7 J8 J/ v
// systematic bias in the iteration throught the heatbug
* j7 N, X0 u& L1 V v+ B* Z // list from timestep to timestep- {2 o4 w5 X) D
) N" K' o0 X4 ?, ? // By default, all `createActionForEach' modelActions have' B/ Y8 z7 n5 T2 V e& u
// a default order of `Sequential', which means that the
, b2 S, T. g V7 c* u // order of iteration through the `heatbugList' will be
3 c5 u2 Z0 h4 c) Y0 f // identical (assuming the list order is not changed/ f4 e# v; O+ y, }
// indirectly by some other process).
9 U N! O9 o' C# F) i7 D+ O
/ k& _3 y* s# A) R modelActions = new ActionGroupImpl (getZone ());( C; M* h1 E3 Y4 l
, e% o1 T3 h8 x8 t. W try {& G0 i* |( h* Y5 B$ M
modelActions.createActionTo$message/ F( A" c: N6 U* K) M
(heat, new Selector (heat.getClass (), "stepRule", false)); ?; \3 w- V2 B& p' d$ M
} catch (Exception e) {: I( w% P% z& b" F4 L+ N9 {
System.err.println ("Exception stepRule: " + e.getMessage ());
; M' [3 w$ k3 }! h8 E- s }; Z6 r0 ~1 t% b; k
. m" X+ e, _' Q1 h: |5 ~ try {& X0 t- L5 U* ~1 d; _) M( w
Heatbug proto = (Heatbug) heatbugList.get (0);
$ g6 u' n1 r* G Selector sel = i* j9 t3 \, G) N$ W/ H- L
new Selector (proto.getClass (), "heatbugStep", false);
' X8 e0 A0 c3 L! p5 S% R3 W actionForEach =& Q2 D4 W# [3 M5 c/ e$ f
modelActions.createFActionForEachHomogeneous$call* l6 I4 U) V6 i$ P$ u% W+ y) [
(heatbugList,
" \9 Y/ y' j" [3 C* R' x, _ new FCallImpl (this, proto, sel, N( X$ u2 |% d- J! I$ R
new FArgumentsImpl (this, sel)));
- l" E. r1 d: X% P7 o" c } catch (Exception e) {* Z& B$ \2 f" _! b8 c2 G" `/ u
e.printStackTrace (System.err);0 `5 ?/ H$ t! F0 j2 l$ w3 a$ z: F4 e
}7 k! O: _6 T# N8 b: _3 \
. g1 o* T: W+ ]: b syncUpdateOrder ();4 G5 p; y! N/ O: ^7 i8 t5 Y4 y' }- |3 x
0 G9 p" Q/ j; M. V5 l/ N try {! M: s- t9 j+ ^
modelActions.createActionTo$message , N _; d2 K1 X
(heat, new Selector (heat.getClass (), "updateLattice", false));" y9 g" A- p2 ?! Y% h7 F
} catch (Exception e) {
" z2 E& u; J* s( m, r/ o( n System.err.println("Exception updateLattice: " + e.getMessage ());
' O! F4 q% F- r/ \ }
# t/ W$ j3 a7 Y4 s, j
' u) M' P7 t' G9 P' M // Then we create a schedule that executes the
' v: U' {4 t S& ` // modelActions. modelActions is an ActionGroup, by itself it8 I) @% i/ ] I) c
// has no notion of time. In order to have it executed in8 b( m' h' I4 p6 M, @% m
// time, we create a Schedule that says to use the0 S" h, _) r" h% d4 D& G* |* B" n+ b
// modelActions ActionGroup at particular times. This
4 g' |: u2 L- v) J5 F // schedule has a repeat interval of 1, it will loop every
( z ^- R8 Z$ Z( J3 L" k/ R3 ? // time step. The action is executed at time 0 relative to
I6 o& y0 V" F9 y // the beginning of the loop.& n2 N9 Y, Q" e; F7 S
/ y( K! Q0 W- G& I& @) n // This is a simple schedule, with only one action that is
% p8 g9 C- q3 k6 ` S // just repeated every time. See jmousetrap for more
, u- J. E8 q! e // complicated schedules., Y" @" Y' N. Z+ Q" q
8 l" A. l: B+ J modelSchedule = new ScheduleImpl (getZone (), 1);/ K- D% M6 d8 Z4 ]$ a, Y9 ~. L
modelSchedule.at$createAction (0, modelActions);
" v# M! ~+ d0 t$ [
7 |# e0 ]7 q& F, o* t9 @; C* e return this;
& r% D) m/ q, [+ W) U) v2 a } |