HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ [* x2 j3 x* n! c+ Q
2 C5 k- b; _. n0 F8 B" X public Object buildActions () {! B5 \4 q0 L3 l ^' ? B# ?) w
super.buildActions();/ V0 ~5 w g% h% k) ]$ K7 d A
1 C; p) Y& J1 ]* Y) q( q+ d // Create the list of simulation actions. We put these in
( k2 j5 Q/ I0 Z. F // an action group, because we want these actions to be% ]* q. G2 w; [) K+ [$ I# e L7 G
// executed in a specific order, but these steps should
. E9 d. D* i% O; Y( c- Z+ s // take no (simulated) time. The M(foo) means "The message' U+ A8 Q: @1 _( b% W8 D' P
// called <foo>". You can send a message To a particular
- x# u2 x5 @% G // object, or ForEach object in a collection.$ b5 ]5 B0 d, }7 x# j6 o) k
( I$ B; N7 E/ k: o' [ // Note we update the heatspace in two phases: first run' D' G2 u S- S
// diffusion, then run "updateWorld" to actually enact the$ r% K# t' c/ A% s* E/ i% v
// changes the heatbugs have made. The ordering here is1 R7 s, k! L: ~% V% L9 @6 k# j
// significant!0 p' o8 y1 v. b2 ^
4 o1 O7 U( `5 @2 H+ h- t5 Y4 k' } // Note also, that with the additional3 e- q5 H) Q! H' T0 T
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) J+ f, g* S8 H' u6 k, l // randomize the order in which the bugs actually run( X( {; O! N% x5 f% |: I+ q% c
// their step rule. This has the effect of removing any
5 D: `6 I1 e0 V, f // systematic bias in the iteration throught the heatbug
O* D/ n# P+ S9 v; Q // list from timestep to timestep0 V K/ C2 @/ L; Y
; R- j5 T/ m i
// By default, all `createActionForEach' modelActions have
6 Q2 D$ ^2 G* d' w& |/ a' g // a default order of `Sequential', which means that the
4 x9 g W+ L+ Z // order of iteration through the `heatbugList' will be& p( G. `4 I1 L) `# D
// identical (assuming the list order is not changed' D/ @/ I* b+ B) |& K' k! a0 X
// indirectly by some other process).
1 O, q4 G4 I0 q! D 5 z" E1 v; S% B! Z
modelActions = new ActionGroupImpl (getZone ());
: E/ z! m& t' J4 o- }* M4 H
8 C6 m$ [# l: A" H try {6 s, h" r- }* q1 d
modelActions.createActionTo$message3 U8 A' D, F5 E' O5 V0 \
(heat, new Selector (heat.getClass (), "stepRule", false));) ?0 f |7 i$ E- d
} catch (Exception e) {
5 N, G8 Y% ^. o System.err.println ("Exception stepRule: " + e.getMessage ());9 a5 S L3 M" v( G; b0 w: T: b
}2 S( Z1 W/ W* S. |3 W
$ M i/ h ~1 Y
try {
) I* p' q% x& F5 @3 w Heatbug proto = (Heatbug) heatbugList.get (0);
! X3 w$ d/ I, g/ f0 T; V, k' @ Selector sel =
0 f% h) c* g) I7 f new Selector (proto.getClass (), "heatbugStep", false);& ^( |" d$ ^# Z
actionForEach = ^: ~: I* l, }# B8 s
modelActions.createFActionForEachHomogeneous$call" I o6 P+ }' \( h+ N( \
(heatbugList,
, L( m* _- X4 D! B% H: Z new FCallImpl (this, proto, sel,
0 l/ i- A; x7 Y, \. D, M new FArgumentsImpl (this, sel)));
4 M4 S7 D4 J$ D; d/ q. m } catch (Exception e) {% Z9 m) j# A, R7 c. ^8 ]
e.printStackTrace (System.err);
" ~% J' V' u2 g) j2 q3 \ }" Y# v9 c# h& }: P7 J
2 E. V# I2 H2 I3 H6 ^
syncUpdateOrder ();" ?0 E1 F0 w# z" _
0 D9 _0 Y ]. z! e# z# w, {1 ?
try {& s8 M8 \- n3 t2 E9 l
modelActions.createActionTo$message % v7 G9 h; H7 Y: V; ~ p
(heat, new Selector (heat.getClass (), "updateLattice", false));& _) i E0 W9 f; M2 v6 J# _" Y/ x
} catch (Exception e) {/ g& Z/ f9 R6 V2 M
System.err.println("Exception updateLattice: " + e.getMessage ());, {6 v9 g$ K3 l
}
2 U1 J+ p5 t6 i# ^3 }- `1 r( F 0 |" ]* G Q! w( n( V" H
// Then we create a schedule that executes the e( {* h& F- g
// modelActions. modelActions is an ActionGroup, by itself it
: N2 @/ H8 Y" M+ k, l1 |( f" [# v& O // has no notion of time. In order to have it executed in) S8 Q- C5 o" ?* ?/ m* A
// time, we create a Schedule that says to use the/ Q8 G9 Z1 @, R& ~
// modelActions ActionGroup at particular times. This+ _ Q- F' U% u4 a
// schedule has a repeat interval of 1, it will loop every
7 V `: g4 p( r- H, `7 K // time step. The action is executed at time 0 relative to0 v! C& K2 o; O: t
// the beginning of the loop.* Y9 D4 M ]" g2 J
2 s* ]* b ]9 [% x" [$ t
// This is a simple schedule, with only one action that is4 I {# X9 z2 j' r! h% ]
// just repeated every time. See jmousetrap for more
/ Z: C& Y5 @7 q* S3 }6 _9 Q // complicated schedules.3 }, K8 z% N$ D" s. Y
$ V \2 W c8 \& _0 c modelSchedule = new ScheduleImpl (getZone (), 1);
8 \6 @$ Q# Q" k3 J6 U modelSchedule.at$createAction (0, modelActions);4 o$ T/ N3 F6 i! L. |- D5 r/ M
9 j, F9 H. h. f2 ? C, ^2 f( j return this;
4 { g6 p9 T: T) W6 ~, A# L8 b } |