HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
_7 F- D6 h. t. ?( Z) l3 i+ ^1 M( a0 [
public Object buildActions () {
( E# {+ n r. Z8 q' R& V/ f, k super.buildActions();4 N' w2 A* e5 m; E
0 v* O6 M& z, g0 V, M // Create the list of simulation actions. We put these in
5 |& q, C1 \( M% a9 R // an action group, because we want these actions to be+ c5 o/ O+ F7 i0 F0 L) g
// executed in a specific order, but these steps should
& M1 ]6 ]2 _3 ?/ b# \. Q9 X8 h // take no (simulated) time. The M(foo) means "The message
" \7 W) N! A2 Z6 N4 b // called <foo>". You can send a message To a particular
! r* L/ L# v3 y# p4 p // object, or ForEach object in a collection. k# _' A, ^9 q
3 O9 [: V# e6 t( p5 ~ // Note we update the heatspace in two phases: first run
7 E+ Q M% [/ h# u6 |# C // diffusion, then run "updateWorld" to actually enact the
# I- |0 y9 w9 E2 Q; L* S // changes the heatbugs have made. The ordering here is
% @2 c3 ^1 b5 ~ // significant!
4 v# ^7 C8 U) Z- U8 `, F
0 W5 S/ A' V, e7 n // Note also, that with the additional
2 N, y7 u4 B( R // `randomizeHeatbugUpdateOrder' Boolean flag we can- G- |+ V/ R( R. T' U s
// randomize the order in which the bugs actually run
* |. ^* T' C ^( C7 | f" U // their step rule. This has the effect of removing any5 P% e; R8 n$ e( j
// systematic bias in the iteration throught the heatbug
7 B, W4 i' E- l // list from timestep to timestep
1 F8 K* L/ i4 U: b* V& p
4 V+ D, x: V0 `1 `) s // By default, all `createActionForEach' modelActions have* ~7 L" M; c. l" d8 |% V
// a default order of `Sequential', which means that the \- \) W Y3 `/ [% v
// order of iteration through the `heatbugList' will be8 _% V8 @. ?6 K4 ^* C, S+ H
// identical (assuming the list order is not changed2 h, g+ k+ O' W7 H; D2 a/ z
// indirectly by some other process)., B1 p7 i& K6 n% J+ [
4 I, _3 @2 D6 W5 ?0 G
modelActions = new ActionGroupImpl (getZone ());
% s( i2 F, f {) Z
0 ~0 v# i) ], M3 e: C try {* a; V+ I" I( j4 J4 f/ l1 q3 z) a
modelActions.createActionTo$message0 t& ~) r$ p. v! W. ]! }% z
(heat, new Selector (heat.getClass (), "stepRule", false));! B& s, L1 ?, T. M6 X1 @9 Z1 D5 z! `
} catch (Exception e) {5 R- b4 Z" }9 I, T- J3 D
System.err.println ("Exception stepRule: " + e.getMessage ());
% D% J S( C' T8 ^ }5 c2 }* y( J% k4 v
5 x( f3 p( P( x8 h' o! m
try { a' s) U3 I- P( \7 T: W: ?. `
Heatbug proto = (Heatbug) heatbugList.get (0);; n, Q1 Q' z- k3 q" o' ]' w1 F
Selector sel =
& X6 d! Y3 i0 a new Selector (proto.getClass (), "heatbugStep", false);
R6 c: O# r) ?2 F$ ]% U5 ?' x& { actionForEach =
: H9 c1 L; Z1 b6 g1 }0 V- T" k modelActions.createFActionForEachHomogeneous$call b& o: q9 R) A, f3 ^+ o
(heatbugList,* D2 {6 l1 }+ m& C. A5 a+ M6 Y
new FCallImpl (this, proto, sel,
5 w* D2 ^5 ?3 F, x8 h) a/ K new FArgumentsImpl (this, sel)));6 A5 }* B! l9 ?7 ]8 n3 S
} catch (Exception e) {! d3 s7 N) p" b
e.printStackTrace (System.err);
' R, a% f5 H6 m9 u) \7 X7 n }
6 Z* O& |( n* Q, @6 T$ _6 ]1 Y
5 _% E f* M# a" T8 k syncUpdateOrder ();# p0 k3 _/ w& u+ q1 l( w c* f7 a
m, y1 B4 F; ], I( Z4 G3 \- K try {
- I5 g1 h+ L3 V1 | modelActions.createActionTo$message
# G" ]% M5 g3 ]' g3 R (heat, new Selector (heat.getClass (), "updateLattice", false));
7 L! H' i$ p7 C. p9 M; h l } catch (Exception e) {# c9 `* I; }5 P
System.err.println("Exception updateLattice: " + e.getMessage ());6 d+ S- C: W. w0 n( `4 b! B1 p& L L4 h
}( I2 b: y; Y' Z% `+ g+ G, x
4 P3 \8 u/ r" E8 [" G N // Then we create a schedule that executes the
: i$ n8 y, [# X: I8 ^ // modelActions. modelActions is an ActionGroup, by itself it; Y; ?& P. }" O4 ~4 a( M
// has no notion of time. In order to have it executed in5 `2 s6 n9 k: Z3 J; t6 ~- y
// time, we create a Schedule that says to use the! R# H* @/ ^! R
// modelActions ActionGroup at particular times. This' w/ C* K- w q* `' q
// schedule has a repeat interval of 1, it will loop every# }3 X- D9 w" }7 G( T5 g
// time step. The action is executed at time 0 relative to
/ f7 F7 p4 G6 A- w // the beginning of the loop.4 h! s8 A) d: {
2 k0 I5 C" a) g1 ~. @' F" f8 O // This is a simple schedule, with only one action that is. o# e$ U8 D! R7 g
// just repeated every time. See jmousetrap for more: g2 w7 f# x$ E" h1 i
// complicated schedules.1 o, Y9 I% L* }+ y/ f% m/ T
5 k w6 o x& @ modelSchedule = new ScheduleImpl (getZone (), 1);. Y. ?' x$ r9 ~# v$ m( Q2 n: e- _
modelSchedule.at$createAction (0, modelActions);
" K% h7 A, a* V. @9 J; p1 x
- p. ^0 D" n( g; u- _. X' q. T return this;8 m8 w. p* U7 K+ l/ o; g V: W
} |