HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& o5 ^6 h! g" F
. O$ g1 r# `2 M m public Object buildActions () {) l9 I7 D; Y5 i
super.buildActions();
3 n4 H9 _+ ?0 D" x: G* `; R0 K
6 D" R" _$ D- H+ }" w // Create the list of simulation actions. We put these in
! y9 J6 L1 e% V' [ // an action group, because we want these actions to be/ }) E8 T5 O7 O6 F! J% i) H
// executed in a specific order, but these steps should
, n1 [% Z' q, }4 G6 w( E // take no (simulated) time. The M(foo) means "The message! Y/ b* G4 E5 W: ?
// called <foo>". You can send a message To a particular
0 Z: T& b1 i Y* K3 f8 t // object, or ForEach object in a collection.
" z; D( N2 ]/ j* O( _
' O" u$ K5 ~* c$ v8 g // Note we update the heatspace in two phases: first run
: E+ X( Z! v% b5 v& k2 s6 ` // diffusion, then run "updateWorld" to actually enact the; z% E' j7 _0 d" I3 d
// changes the heatbugs have made. The ordering here is, {& G, Y9 V$ K. E2 u
// significant!5 l) G* j L5 L! A% m: r: l
' o& R' u# S1 J+ ]+ l // Note also, that with the additional1 W3 ]- h9 [- Q. A A$ |9 r
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) t h4 M- J1 a7 U( I1 d // randomize the order in which the bugs actually run [- |, k* a! i9 E. _4 K
// their step rule. This has the effect of removing any
! A+ Q, v( F4 x7 W8 O" |8 n X U // systematic bias in the iteration throught the heatbug; q0 b! E+ ]$ S* R3 T
// list from timestep to timestep3 C& F7 J0 \4 T) s! @0 f1 J0 s# Y
) d1 `& L/ ?) _' Y2 _+ y // By default, all `createActionForEach' modelActions have
' E4 a; G B, a: X3 A // a default order of `Sequential', which means that the& M6 [7 d" g a) t
// order of iteration through the `heatbugList' will be5 l0 W/ P, w7 m6 t6 l9 Q
// identical (assuming the list order is not changed
5 U+ `& D4 W, R) [ // indirectly by some other process).
+ p/ k; c* {/ ^, _# j
5 n! S B+ F X! {- y( N( J modelActions = new ActionGroupImpl (getZone ());" D; z: k7 }2 }8 @# [
; {3 J* a" T D4 c! I# P try {
) N( j: v6 a' Z/ E% ]( g1 w/ b; j modelActions.createActionTo$message$ t8 m2 Y4 ^0 m Z0 r2 E
(heat, new Selector (heat.getClass (), "stepRule", false));
: j- t) y: y+ ^ W' L! C } catch (Exception e) {3 P N1 |2 B) a! C% {
System.err.println ("Exception stepRule: " + e.getMessage ());. x6 W7 f% i/ h9 L7 F! F4 E2 l
}- ]8 a- b, i, G, J1 ?% q
) K& T* C3 S2 e. }
try {
, y- m9 k4 r% y. J+ q Heatbug proto = (Heatbug) heatbugList.get (0);' [ O, _$ U; k, Z7 Z; n+ d$ b! L
Selector sel = ) f; A+ c) u+ T) U) R, H
new Selector (proto.getClass (), "heatbugStep", false);
9 {0 ~( C/ a; `9 s actionForEach =3 ~; A8 D4 {! q5 Q) Q4 C. Z7 D
modelActions.createFActionForEachHomogeneous$call
' a% C8 {! _8 i/ e2 E" V; _9 x (heatbugList,
# ]& i( h9 M1 x2 A new FCallImpl (this, proto, sel,
4 L/ c1 p- @0 p& X) k new FArgumentsImpl (this, sel)));
Z6 m/ T1 I1 R+ W9 s6 a$ I/ ?* q } catch (Exception e) {" w. m7 J3 o1 o) g/ F+ M8 c" t) X
e.printStackTrace (System.err);
4 ?$ K |, g5 Z9 X }
H0 ^( O- {" Z0 Y; c
* q- v7 c& |" e$ F" V8 B' g syncUpdateOrder ();( j* M/ G9 `3 j- P; Z# }2 {2 {, T4 y
3 @% Y# e7 y- C8 E6 U$ a1 W8 | try {2 g! ~9 F3 l7 t
modelActions.createActionTo$message 6 U/ K9 s h) B* y |3 C; Z
(heat, new Selector (heat.getClass (), "updateLattice", false));4 P$ C/ b2 q- s4 R! \" C: t1 k2 _
} catch (Exception e) {
5 Y2 e# U% J8 L/ f System.err.println("Exception updateLattice: " + e.getMessage ());$ Q0 c+ g! v$ ]! e( `8 S
}3 c6 p* s9 U. K* x9 T
0 R! P5 O4 Z3 ?* q$ D% s8 t
// Then we create a schedule that executes the
) J" J1 }: F' `( k/ Y // modelActions. modelActions is an ActionGroup, by itself it
+ o# W7 j( v' j( p8 H: e // has no notion of time. In order to have it executed in, G" |- _) o: F3 Z% a
// time, we create a Schedule that says to use the
: ~% Y: }9 W5 d# X7 p( E; y5 B // modelActions ActionGroup at particular times. This0 } z3 y1 H% c( L: j+ ~% V% U
// schedule has a repeat interval of 1, it will loop every) d" y x* u6 Z2 g' L9 ]/ e
// time step. The action is executed at time 0 relative to
' _- [4 u8 v/ x0 q // the beginning of the loop., @5 h- B; u/ p% s
$ ~5 y) k# u/ V0 U+ Y5 p+ }% a
// This is a simple schedule, with only one action that is
: d. v( }: v' w" g5 g/ F3 _4 L // just repeated every time. See jmousetrap for more _" `4 X0 ]1 _1 I+ r- H- b4 }" ~
// complicated schedules.
: W2 q5 ?5 g: r/ x0 M5 |( K, S
; p8 _+ Q/ h" j+ [ modelSchedule = new ScheduleImpl (getZone (), 1);
, `$ d" m8 p7 C( @( d modelSchedule.at$createAction (0, modelActions);
& ^$ X" J) H+ X6 J5 f3 D+ g w
* s- X( L g1 ?* ^ x. x% q3 Y return this;
' G6 _( e) r- S1 J' R9 r- m } |