HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 |+ P9 A* e# Y* ` I' r0 A
" [4 c( \& `5 F4 W public Object buildActions () {4 a) c. T% [/ Y* u% n5 L; z+ v6 [
super.buildActions();
( l! `* w/ K0 b/ K% r& S7 g/ |4 x
% U( i! S& m L6 j/ Z" w* y // Create the list of simulation actions. We put these in
+ n" D$ u* Q1 M" f& | // an action group, because we want these actions to be2 B1 d& \1 k' M, m5 j- }, K2 C
// executed in a specific order, but these steps should, X/ r. z' U' Y. G! r1 E \0 W
// take no (simulated) time. The M(foo) means "The message4 g- @0 z# ?7 N* Z
// called <foo>". You can send a message To a particular
& O' W: p7 h$ F! P4 W: ~ // object, or ForEach object in a collection.
* Y) F; t' a: T+ }9 P8 I9 a$ o
k; x+ @0 W$ \! J9 a // Note we update the heatspace in two phases: first run
2 d8 |5 J/ l$ p // diffusion, then run "updateWorld" to actually enact the" d) @. _& N) n$ j+ v( e5 {
// changes the heatbugs have made. The ordering here is. b; w* N3 h0 U" C: _
// significant!- \( |2 P, c3 j$ t. }& w
0 R% d& n: R& n5 F // Note also, that with the additional
* l, [# \) l. p& f: T // `randomizeHeatbugUpdateOrder' Boolean flag we can
& O0 C' Z; \" V( l7 @. u // randomize the order in which the bugs actually run) g! l7 d' v9 s" D& n K; P
// their step rule. This has the effect of removing any
5 a7 ^" m+ s' r6 I, p- ?+ c+ r // systematic bias in the iteration throught the heatbug. m. x6 x! n# G1 l2 R; a
// list from timestep to timestep
( y _2 ?- W" F& y% p9 I 0 O y! J% M' \9 R( ^" ]! T- L# y
// By default, all `createActionForEach' modelActions have$ v/ L2 W8 L! A: M' D3 }+ p
// a default order of `Sequential', which means that the) ^$ R. Y* r8 `8 d2 s
// order of iteration through the `heatbugList' will be2 N) x H* k' [" E5 i# F: L
// identical (assuming the list order is not changed* H0 t: w5 }$ [1 _
// indirectly by some other process).- K6 O1 O, }7 P9 P a* X( |
' r8 X8 N& z) @8 |) [' ] modelActions = new ActionGroupImpl (getZone ());7 _6 n, A4 A; O. F' U3 v
2 {( Q9 F* I1 U/ x1 b0 Y0 \
try {9 T; ^& b' } j3 [$ K7 e
modelActions.createActionTo$message& V% i9 Z% T! I- q
(heat, new Selector (heat.getClass (), "stepRule", false));2 F* N1 Q& t: ^- p( H# z
} catch (Exception e) {8 \: M b' M# l' E
System.err.println ("Exception stepRule: " + e.getMessage ());% H, H6 J/ z+ ?) _( C9 k0 y( `$ t I
}
5 ^4 a8 f; ]9 U' W! H
. O4 R& Y8 s. G1 f {. l" M try {
! d5 u4 Z, O7 R0 \ Heatbug proto = (Heatbug) heatbugList.get (0);" H+ u6 j: O) p# m7 N
Selector sel = 6 O# l. }5 _$ h# [2 f) |) A
new Selector (proto.getClass (), "heatbugStep", false);
: Y) c9 @* Y7 f$ w/ y8 k& ] actionForEach =) T3 i9 U& s$ D0 Y" c
modelActions.createFActionForEachHomogeneous$call
; e2 c( M, z- }, {' L+ w! c* e (heatbugList,
; [: D. Z% J; C5 L! ` new FCallImpl (this, proto, sel,
4 r$ i( Q o" H new FArgumentsImpl (this, sel)));
3 o% q" \: p* z- A } catch (Exception e) {
# ~+ l4 j; d4 Z e.printStackTrace (System.err);
% x- z2 ?0 Q% A9 G4 L4 C }) \( ~; n" S1 Z# f( D4 l
: U5 `9 U6 S/ T7 C, d0 d7 {* J syncUpdateOrder ();. h: K7 ^7 W* @6 H. |
: [3 M* ^ F# N" v' J8 c* B1 u
try {
. J o% h/ R# v modelActions.createActionTo$message
& a2 J. @( z: Z B% @5 o0 \, ? (heat, new Selector (heat.getClass (), "updateLattice", false));1 m# [5 U+ d* }* _, G. |
} catch (Exception e) {" _( k0 W2 x& n9 J: h, A
System.err.println("Exception updateLattice: " + e.getMessage ());
$ B4 i# }9 u; m \* P }( y0 J: _6 b5 c& \7 Z+ a2 C2 F
& `4 E* r# s. b, o; C
// Then we create a schedule that executes the
& f. B( K3 q; t3 b // modelActions. modelActions is an ActionGroup, by itself it
+ j. U7 G1 t! @ // has no notion of time. In order to have it executed in
1 W3 H5 j8 F) P3 M+ u) A1 h z // time, we create a Schedule that says to use the
" k3 C6 _. \; ^% d // modelActions ActionGroup at particular times. This
* H0 s8 a, ~; `2 _7 S // schedule has a repeat interval of 1, it will loop every- k: |' k6 m2 U# o0 j! [
// time step. The action is executed at time 0 relative to7 O+ J* d! E! p# o# r6 H
// the beginning of the loop.6 H: K, ^# |% e* |8 b- I
1 }; \: \" ?# N& v
// This is a simple schedule, with only one action that is
% n& \5 | A+ l* c3 S0 R3 o // just repeated every time. See jmousetrap for more" C7 A- N" C7 z0 {
// complicated schedules.
3 q- {+ g& s% I3 q) A ) z" h8 e; g, S! w8 s" U' l
modelSchedule = new ScheduleImpl (getZone (), 1); p& ~7 w: P* ~3 Y' B& A0 R
modelSchedule.at$createAction (0, modelActions);
8 ^. z# m5 L R' Y g
0 ~% E, z8 X( z" c% l- i1 p return this;# l9 k& b2 ~! b
} |