HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 N' M) f2 j C7 _" a8 d& @
( J% ]( f/ c: K# W3 X public Object buildActions () {/ l a7 p4 W2 j: B8 [
super.buildActions();2 T% G& d, J& ~& J K
/ ?/ Z- T6 u* W$ z+ `6 P* k
// Create the list of simulation actions. We put these in8 N0 p) g; O# _" ~! u( l
// an action group, because we want these actions to be
S$ H. g. ~3 }( s5 m // executed in a specific order, but these steps should
, X3 N) h% r" |7 j' P // take no (simulated) time. The M(foo) means "The message
$ f' [5 E+ w/ h; w$ J4 H7 t: h; y // called <foo>". You can send a message To a particular8 y8 q. M$ e/ L, v
// object, or ForEach object in a collection.
4 {4 z* c" Z2 a# s/ A. E , m- @- j$ N( N% N, k+ R4 [# ]
// Note we update the heatspace in two phases: first run
& }8 @7 A* j% ]# B2 ^ // diffusion, then run "updateWorld" to actually enact the
/ ]6 j$ s* R9 K // changes the heatbugs have made. The ordering here is4 _/ h' _7 |, |# x6 E
// significant!
8 ^7 m' z( \* i! M! F
9 t' ^. G# B% h. Z; S // Note also, that with the additional
2 E9 r. r* f0 h* _ // `randomizeHeatbugUpdateOrder' Boolean flag we can* P, X6 B' S/ ^1 j* |0 Y4 |
// randomize the order in which the bugs actually run
+ N% Y$ z: V* j9 g$ h) h, | // their step rule. This has the effect of removing any2 G2 e C: o5 M% |6 \/ F2 }6 V
// systematic bias in the iteration throught the heatbug, i0 }5 m, ?2 o* j1 |0 n @0 M: ]
// list from timestep to timestep
" S: C, h D6 l0 @
3 \0 {; W6 L) e+ H // By default, all `createActionForEach' modelActions have
+ g; E. C u3 w! n // a default order of `Sequential', which means that the
& T" l6 M8 f. V! O3 ?3 s // order of iteration through the `heatbugList' will be- K% _+ B2 z8 G8 b# W4 e/ g% `
// identical (assuming the list order is not changed
* B3 o! G, z l1 N // indirectly by some other process).
9 i# X d! m1 J) u # u4 ?! J4 c/ R1 X) ]
modelActions = new ActionGroupImpl (getZone ());" G) Q) {4 ^% A8 y- g4 r
9 `3 t) x) _2 E) a0 p% t try {
- X7 m5 X+ }5 U8 [+ U! [ modelActions.createActionTo$message$ e* o/ D4 P8 D& x2 X, q+ Q3 {
(heat, new Selector (heat.getClass (), "stepRule", false));
/ h- E q- t. O; R0 m( E: L4 b7 f } catch (Exception e) {
$ ]7 { D0 l1 H+ z6 |7 [, S b System.err.println ("Exception stepRule: " + e.getMessage ());7 n: R3 V% E, m4 p: g7 i
}( Y9 C7 n% a0 Y7 A* e/ L' G
/ t5 Q' B% v7 v
try {
; J: k! C. _5 P7 w Heatbug proto = (Heatbug) heatbugList.get (0);9 U6 h( f- x% D9 j
Selector sel =
! Y: D5 V1 X7 J# F: C new Selector (proto.getClass (), "heatbugStep", false);1 |- S) n) }. f% u. P1 @% z; _! p
actionForEach =
( v s- J; \# g7 B modelActions.createFActionForEachHomogeneous$call
- E( v( h' @ _& L% |9 r) } (heatbugList,
7 n8 B; U) ?- v3 x* Q6 R1 W/ I new FCallImpl (this, proto, sel,
* H5 A9 D w& J* t- ] L% ?) a new FArgumentsImpl (this, sel)));7 R* m3 C$ ~' N2 Y
} catch (Exception e) {2 @1 Z2 \% Y0 q. f9 J+ L+ |
e.printStackTrace (System.err);
0 }& c6 W+ D, P5 Z- Z! z& r }
% J' X: b) p! E; N' j4 N) E
- }: X6 Y; S# | syncUpdateOrder ();
3 g5 G9 j. Z. k6 [3 L0 D4 O0 K! r, M; O- x9 A/ p0 Z
try {
; M1 u0 R: E; E* x8 x, j5 H _ modelActions.createActionTo$message 1 O* @& O# R7 ]2 ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
% J, y7 B' S; @7 i- A; Q } catch (Exception e) {
5 s7 Z: H; G. h" Y System.err.println("Exception updateLattice: " + e.getMessage ());2 l3 S0 x; i# D" U# g/ F
}7 i/ j& j- E' J0 N8 M1 }
, L* L5 h# d' [3 B% ~' |; H
// Then we create a schedule that executes the; [, t- o* Y% v# Y4 |
// modelActions. modelActions is an ActionGroup, by itself it* G/ x# k: s" a! H8 q
// has no notion of time. In order to have it executed in. o- o+ u) @8 g8 t8 K
// time, we create a Schedule that says to use the [+ j9 x' ?, z, ^: a
// modelActions ActionGroup at particular times. This
5 v9 H: J5 p a& v$ i, M1 S // schedule has a repeat interval of 1, it will loop every* L! ]6 b: j* Z( d
// time step. The action is executed at time 0 relative to# l( d3 n( \0 c' u4 u+ h
// the beginning of the loop.
' G2 u* Y9 D$ R" f1 R& w1 g" P) G9 |: }
// This is a simple schedule, with only one action that is# ?- L$ c7 `9 _! N$ ] Y2 Y
// just repeated every time. See jmousetrap for more' [: \, S; R* N3 m
// complicated schedules.% _* [* _. l6 E- M4 I3 r/ k+ Q
& A# C; V8 @* j# t$ \% A4 Y modelSchedule = new ScheduleImpl (getZone (), 1);
! c9 Q4 x& I) x6 O; S modelSchedule.at$createAction (0, modelActions);
+ u/ z4 R' S7 f/ o! }3 L9 O5 L/ v
/ g3 J7 X" z; {- X P( s return this;
! O) u% i2 o/ f } |