HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 v3 X2 O/ `: l! E2 P( _7 V2 S4 ^
6 b) R( O9 r! p# \/ G( J5 z2 U# x
public Object buildActions () {1 X6 q5 w8 C2 g+ F' h1 @- q4 O9 d
super.buildActions();
" f" f* q0 G: s8 }1 E3 D 4 \9 _" {" t; W4 g4 v
// Create the list of simulation actions. We put these in
5 b' R$ d% y. e" R // an action group, because we want these actions to be
2 b; A7 F0 |$ t; s2 N // executed in a specific order, but these steps should l2 v0 j& A$ P. I( a7 g: v
// take no (simulated) time. The M(foo) means "The message% E1 _ i8 _4 b0 L5 I3 V8 n
// called <foo>". You can send a message To a particular8 Z f- B# Y7 a; M
// object, or ForEach object in a collection." n( W* |* W ^
* r) m& W1 H0 _ // Note we update the heatspace in two phases: first run' @+ l2 X4 O4 Y: x) V. J7 Y' a8 y
// diffusion, then run "updateWorld" to actually enact the/ C0 \( H3 l Q9 T, |
// changes the heatbugs have made. The ordering here is$ Q7 `1 b, D0 e! N8 |9 O
// significant!: L3 ^- T+ | Y9 \
# V7 g T: k: k. I! z0 N) Q3 H
// Note also, that with the additional
?% G) M" H" J- P) G // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 p: I4 Q3 x. b% {8 ~8 t // randomize the order in which the bugs actually run8 ?6 _- j3 p" f
// their step rule. This has the effect of removing any
3 O7 U& z8 J0 @. | // systematic bias in the iteration throught the heatbug& j# n! i- e9 c' W- N$ n
// list from timestep to timestep6 B5 h. m0 b$ h2 T+ F1 b
) N; Z+ L3 D7 ^" S1 Y // By default, all `createActionForEach' modelActions have
2 H g. \5 u8 g0 N // a default order of `Sequential', which means that the
[( h) d R3 t1 i8 Z // order of iteration through the `heatbugList' will be. R. N- G T! B# q, G& P- o) r
// identical (assuming the list order is not changed
" G0 M Y$ k. S6 f" J9 H2 h // indirectly by some other process).
! N- {: ?7 d" e4 O/ D, a% F$ N
' p- Y& g l: @, e" B0 m modelActions = new ActionGroupImpl (getZone ());
4 H# B% C: b4 j8 E
8 C) X$ B0 ^9 ` j9 @- K0 B$ H6 Q try {
1 S8 Y2 p4 P& @4 b0 q5 I1 @4 o0 c modelActions.createActionTo$message5 n% Y# Q( N0 Q& }" I
(heat, new Selector (heat.getClass (), "stepRule", false));( x: i- x. F; f& }! A+ C
} catch (Exception e) {
0 N& B4 P2 }2 k9 j" d1 N System.err.println ("Exception stepRule: " + e.getMessage ());5 K7 K& ? X' _/ S4 y" y7 v2 |
}, \# r5 [6 f) ^2 y+ y
9 J4 B9 Y* R; z
try {6 p4 Y$ g% N& H5 X
Heatbug proto = (Heatbug) heatbugList.get (0);
# e2 q8 q! [; ] U7 m/ |: { Selector sel = m {) L0 t) X. C7 F
new Selector (proto.getClass (), "heatbugStep", false);2 R4 y" H8 }$ m# Q# { o3 b4 {
actionForEach =
9 L4 n$ W* k; S* q' A modelActions.createFActionForEachHomogeneous$call
; E* u ]# I9 Y; } (heatbugList,0 F5 F1 w6 t+ I( E8 a( [
new FCallImpl (this, proto, sel,
! f& X( _6 q. I; Q0 Z" T0 W new FArgumentsImpl (this, sel)));: m0 }! O9 I4 b0 U# E( t' e" { h
} catch (Exception e) {
; T" M9 L' E5 d" T e.printStackTrace (System.err);
; g2 e3 Y) c& v/ l4 c- ^ T }
3 K! g5 m0 J, H ) `2 T. }) r9 w+ L, G" w
syncUpdateOrder ();) n2 Q: T# G1 f2 }# D5 y: e6 |
9 D! w9 f/ \, R8 E9 V8 x Y
try {- ~6 q7 P- D- a& j
modelActions.createActionTo$message
0 f! u4 w# ^! n4 T/ W) X5 l (heat, new Selector (heat.getClass (), "updateLattice", false));
) p9 O# s0 h8 p. W$ H; Z } catch (Exception e) {
; N/ r7 l% \! p0 u; w- j! _+ Z System.err.println("Exception updateLattice: " + e.getMessage ());; q& h) R8 T4 z" q; o
}$ j$ l4 n/ R0 g' e O
0 ?$ B/ d9 |5 I' F& J4 u& x! a
// Then we create a schedule that executes the
3 X" a7 |) r& b) E/ o // modelActions. modelActions is an ActionGroup, by itself it8 S9 B9 g8 x+ l& i" X
// has no notion of time. In order to have it executed in4 g" F9 c/ P, ^, c/ g
// time, we create a Schedule that says to use the
' r3 O, L; b. u# K5 \9 g* Y: x0 e // modelActions ActionGroup at particular times. This: k0 Q3 X7 `& K. \
// schedule has a repeat interval of 1, it will loop every
: ?( ~7 P) e" U" w2 B" i$ Z+ a // time step. The action is executed at time 0 relative to, t( D# z/ g; x5 E% i
// the beginning of the loop.
& L" \3 G$ o8 I+ L9 ?+ ]9 y6 f1 H9 I5 @2 `9 h: }* |+ B- j# I& H
// This is a simple schedule, with only one action that is+ V' E t$ P1 G6 |7 S
// just repeated every time. See jmousetrap for more
; T; z/ }( B3 d' d q. v0 T1 {( v // complicated schedules.
& b3 i4 E4 J& `6 V; C 5 T, x3 [6 X q- o* [
modelSchedule = new ScheduleImpl (getZone (), 1);
( [0 B' c8 _+ I8 _; i modelSchedule.at$createAction (0, modelActions);+ S/ D1 i) d. k( r3 d
4 s* L# D$ ?3 v% O N9 G return this;
% v5 s. l$ M2 g* B7 a. L } |