HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 [5 T( O3 W( v( M. S: z
" N( O5 @+ Z& o+ h
public Object buildActions () {
0 k! {* s+ _2 c$ Y0 }$ `, i; K, M super.buildActions();) e- k0 e# g# F# _
* S/ e. t% `9 Y // Create the list of simulation actions. We put these in
/ |) s V x2 e) c; v$ M* N // an action group, because we want these actions to be3 p- J1 c( w5 T# g
// executed in a specific order, but these steps should
1 Y! p* Y( z2 F9 P3 W7 h // take no (simulated) time. The M(foo) means "The message
" a. ?7 x! Z; _5 c- j( S) t // called <foo>". You can send a message To a particular! \- N9 b7 c; N% n' D6 `; A
// object, or ForEach object in a collection.
6 m9 k& N: [4 h; t
( n3 `, ~$ R) t4 y // Note we update the heatspace in two phases: first run6 z: X( H Y6 K4 v! H
// diffusion, then run "updateWorld" to actually enact the
* B: h9 b, U, B8 |' G // changes the heatbugs have made. The ordering here is5 ?: Y0 O6 j8 ]2 k6 D/ Q5 R
// significant!+ X% m% u2 o' n! o+ H" z. r: \
! w8 e) L5 Z& W' p3 i // Note also, that with the additional4 u) D: v8 t! N9 C4 n5 E( x+ }
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 H3 N0 P H3 f6 K" S
// randomize the order in which the bugs actually run6 q5 d' p' V( o" w9 m' Q: O' P4 d
// their step rule. This has the effect of removing any% V7 a$ b' t6 d' |2 ]4 N8 ~
// systematic bias in the iteration throught the heatbug
D: J: u2 S- ?) b& ? // list from timestep to timestep% @' b6 N4 K2 F1 _, f. [5 V
0 T+ D8 `' p, E0 w8 S9 Z) x% ^# z // By default, all `createActionForEach' modelActions have, j+ r9 x+ L, Z
// a default order of `Sequential', which means that the
1 _, L& E" R% h, [& w // order of iteration through the `heatbugList' will be
( | @2 z ]/ u# c* w% G- ^7 p // identical (assuming the list order is not changed) P2 s3 G* E1 Q; z0 n
// indirectly by some other process).
& C* `9 o( F% Q8 v4 ~: X $ B& e8 k3 b4 h6 a# G& M- D
modelActions = new ActionGroupImpl (getZone ()); A8 s; f" m* ?) z- B3 i% Z% v) @1 ~
0 o7 E0 R5 {9 Y
try {; O J- ~3 B# ?% Q0 N* J* N6 \
modelActions.createActionTo$message
. r- f$ n) N* f- p (heat, new Selector (heat.getClass (), "stepRule", false));
- M9 [- B2 f* |7 a" e7 z/ ` } catch (Exception e) {7 I7 T6 a. V* `
System.err.println ("Exception stepRule: " + e.getMessage ());/ k* r$ X# i1 } b- Q9 o; i" w
}3 b" D8 G7 }- W+ |" \
4 Z' M7 n+ X" U+ `0 `# r9 \
try {
S$ a8 K/ e' H }$ u0 ~* e0 F+ q Heatbug proto = (Heatbug) heatbugList.get (0);
2 p0 O# ] t5 G; u0 f5 S- O Selector sel =
# m+ J" t2 ^6 Q" z* f new Selector (proto.getClass (), "heatbugStep", false);
" z. V, f" |4 {' i z: V* W actionForEach =
% K4 A5 d# U6 O4 J0 A, ` modelActions.createFActionForEachHomogeneous$call/ o3 r; c; e* A# H5 B7 M
(heatbugList,
& ^: z% y) N2 i8 w new FCallImpl (this, proto, sel,$ b1 r$ ^* L4 @& c
new FArgumentsImpl (this, sel)));
5 c' f9 k+ t! b. y } catch (Exception e) {
+ D: w6 F3 H5 H6 |$ H' F4 C e.printStackTrace (System.err);
& x5 K5 F6 y$ v& b4 w4 Y }
4 i9 O8 O4 }3 ], B4 x5 c4 h : _% S' ~. Q- C5 P) M# W {
syncUpdateOrder ();0 o; y2 _) D) M& u
! j/ @9 `2 w2 o) N try {- O& k. {! r' k2 b- E
modelActions.createActionTo$message 5 Y% j8 {" g9 N: {# F& K
(heat, new Selector (heat.getClass (), "updateLattice", false));( F1 q$ v. F- x3 [" [3 Q! S* @
} catch (Exception e) {1 H7 j0 X4 \* Q. c; N
System.err.println("Exception updateLattice: " + e.getMessage ());" r! K* y, T0 G1 J1 l4 I- u
}
- u% x% _5 d( r7 `4 ^& }0 @ - l5 F% ~6 m0 o
// Then we create a schedule that executes the/ \6 {4 |% o8 x1 x7 P
// modelActions. modelActions is an ActionGroup, by itself it4 b/ F. X( I3 K4 B0 g: H: d
// has no notion of time. In order to have it executed in3 I) n2 J& v0 y& `( R0 ]
// time, we create a Schedule that says to use the
3 f+ O# M9 S/ S: `2 X5 e3 Q% B( W // modelActions ActionGroup at particular times. This9 @" E7 j0 h( ^' \! E
// schedule has a repeat interval of 1, it will loop every
5 s O& s! k3 r4 P // time step. The action is executed at time 0 relative to7 U8 z% K1 m3 R* U6 K* v6 C# ?: M
// the beginning of the loop.* e- |* X& e! T8 J1 b
8 G. |2 B* l% M( a/ w W
// This is a simple schedule, with only one action that is
9 N+ G) V' r* l7 M; K. w4 J; Y // just repeated every time. See jmousetrap for more
: U7 j5 t# l* t# [6 p" M9 ` // complicated schedules.7 V: @( B7 D0 p8 L
M) d0 M2 y: Y9 p, \ modelSchedule = new ScheduleImpl (getZone (), 1);' b8 M& H; i; Q2 |9 M* _" ]2 @
modelSchedule.at$createAction (0, modelActions);" U, j: V9 c3 g; R
8 u# ]+ E; m. Y return this;9 F% f. a( S' `& I- N+ H& w
} |