HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 a& [8 S6 f4 C8 g* @. H2 }/ s( l) G0 g
public Object buildActions () {; [. i: ^* { c3 Q2 N8 { G
super.buildActions();0 ?% L6 A6 t' X2 S% }) ^% Q8 q
) O+ o6 i G3 ^4 _4 @6 l9 c- h5 ]
// Create the list of simulation actions. We put these in
2 f" s( Y B0 p // an action group, because we want these actions to be
7 `+ Q/ R8 m' W0 q3 F- C: H7 A9 Q2 J // executed in a specific order, but these steps should7 M/ o: f8 C, F
// take no (simulated) time. The M(foo) means "The message' V- u& D. Q! t3 f( \7 L" r9 U" c
// called <foo>". You can send a message To a particular) J7 w) Q/ K# G7 N
// object, or ForEach object in a collection.* U* H# I/ w+ b& p
" G1 B/ g& p2 _8 e1 R4 r, v // Note we update the heatspace in two phases: first run( @; E1 X d, p( u' t! a
// diffusion, then run "updateWorld" to actually enact the1 F" |2 ~. o" `# }# J" R7 S: t
// changes the heatbugs have made. The ordering here is
6 d& C2 s* h7 {9 v // significant!' t/ M( c2 f4 V i5 Y, Y- O: {, y
1 n' L% B: a0 x( d& | N! o
// Note also, that with the additional
: R/ h6 [ U; B5 z1 e% m // `randomizeHeatbugUpdateOrder' Boolean flag we can! _1 A3 Q ~! y% K3 R! ]
// randomize the order in which the bugs actually run2 C- D" B$ ` ^+ p+ v
// their step rule. This has the effect of removing any
' `3 |" Z: Z! U$ ^! B // systematic bias in the iteration throught the heatbug
, V* p. u C# P // list from timestep to timestep/ h4 L9 s9 `/ d
+ g. S+ P `% c8 ?! @
// By default, all `createActionForEach' modelActions have& m2 g) i) m2 ~3 d# V1 g
// a default order of `Sequential', which means that the
" I: r) `4 P+ k, x: k* B // order of iteration through the `heatbugList' will be' z( e) V" x3 i& B! R6 D* |2 b
// identical (assuming the list order is not changed
% ~7 E, i8 D. \9 P) D5 q // indirectly by some other process).
8 c2 j. F6 `" S9 w6 W7 }
# j3 L+ H( i" W5 N: F# {" } modelActions = new ActionGroupImpl (getZone ());
* T; z/ Y9 x1 l1 N' g* w% U, J. m/ h( U. q, h0 p
try {
0 D4 |0 r7 Q1 |, j z0 w modelActions.createActionTo$message
- @! P# G5 k5 u) d. i (heat, new Selector (heat.getClass (), "stepRule", false));
: i8 [, g' L# n3 P3 `% c } catch (Exception e) {
) N1 u! @2 {0 K. f6 ]2 a7 H System.err.println ("Exception stepRule: " + e.getMessage ());6 {3 E- | S) ]" J; E% J. S
}; V+ ?7 }; ^0 H- Y# J
0 C! j. L+ M3 ?' K
try {
1 {) R+ l: j: [! F# k Heatbug proto = (Heatbug) heatbugList.get (0);1 V; _# Y) H$ C8 S
Selector sel =
3 ]0 o; b, K9 f- [+ I' } new Selector (proto.getClass (), "heatbugStep", false);
3 f; p* `& m- L9 y2 T3 R actionForEach =
, E/ O7 T! M. u modelActions.createFActionForEachHomogeneous$call
( V. @" z8 ~1 [6 n* u9 d (heatbugList,
c) I1 i9 e6 I- K. e new FCallImpl (this, proto, sel,
: ^( R6 g4 ]7 `- ~* S. w new FArgumentsImpl (this, sel)));
4 i/ K9 s6 }+ Z } catch (Exception e) {
, Q% m$ g$ N. l e.printStackTrace (System.err);/ _- w9 |/ L, Y8 v" R& n2 y
}9 s5 n! u8 X, Y/ S
# } Q( {9 [2 ?; j1 r# U; e/ Q1 z
syncUpdateOrder ();/ d6 y" T% ]# [. C A( F8 H+ s
8 {0 j4 d8 m9 E1 @& Z6 B
try {3 F; V- G. C# ^& U, h1 v& n/ c# j
modelActions.createActionTo$message ' A2 D) ?8 d! y4 a9 F
(heat, new Selector (heat.getClass (), "updateLattice", false));
- j. q0 Z7 c& \1 }; x } catch (Exception e) {
9 N B2 v( n9 _8 ^, [ System.err.println("Exception updateLattice: " + e.getMessage ());- ]8 H: @ U( z- D Z3 y( o0 A
}
( T/ I I$ Z4 W b; t s T- ]4 }- o
// Then we create a schedule that executes the
% G7 P) q. i4 ]; }6 z" Z/ n // modelActions. modelActions is an ActionGroup, by itself it
2 Y0 G: x9 e. F5 `9 k8 p // has no notion of time. In order to have it executed in( n2 w) K7 T! Q9 _0 p8 }
// time, we create a Schedule that says to use the3 u- X1 `. E5 C. a. r9 o
// modelActions ActionGroup at particular times. This
! R; L, a R2 P: t // schedule has a repeat interval of 1, it will loop every
' L3 {7 S4 @$ V4 X" u // time step. The action is executed at time 0 relative to
2 N: t W2 y( @. Y // the beginning of the loop.
2 O! z, q# b' A! w
, ^" m# R: {5 B4 h% D // This is a simple schedule, with only one action that is
8 G* `* [) P! }0 F! d // just repeated every time. See jmousetrap for more# T# c' E+ g7 w
// complicated schedules.
: t7 z; t# B; g0 h" K4 ~( S : j% W9 H* g& {3 Q# I$ B
modelSchedule = new ScheduleImpl (getZone (), 1);
$ r Q( u8 h9 K3 { modelSchedule.at$createAction (0, modelActions);' k, h7 F! e5 ?1 @+ K
, L1 F4 ~7 u9 T6 W5 ?' i$ E
return this;
A9 ^* K/ h6 y( d! Q" X } |