HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. _2 k, `8 \' K3 a
! O" n, B- m _; O, w4 t+ P1 E public Object buildActions () {
# v9 c* l% {/ E super.buildActions();- f1 E0 w5 o5 H& Z0 m4 s
: }/ v& s- R- C1 T // Create the list of simulation actions. We put these in% Y% c3 j& n0 e$ k
// an action group, because we want these actions to be
; Y& d' n5 q$ A0 y // executed in a specific order, but these steps should
1 r F0 [$ W' U0 R$ C! V // take no (simulated) time. The M(foo) means "The message# p& u) D2 H2 }
// called <foo>". You can send a message To a particular
' |: Y9 g3 {' W4 t8 G // object, or ForEach object in a collection.
1 L$ z0 j9 _1 n3 ~6 F & I# M3 a* x9 |* S
// Note we update the heatspace in two phases: first run
- P9 c3 K: s* Z6 b- y3 O // diffusion, then run "updateWorld" to actually enact the L: n* _/ t' B( y& j
// changes the heatbugs have made. The ordering here is9 C0 n1 D6 ^% T% ]6 W
// significant!
& f! ]3 ?2 S4 A6 e! v) O5 r7 v 4 R# n1 S* h; j# ~! u) A3 x
// Note also, that with the additional
9 f1 }* U8 i3 H- Q6 n# f) V8 c // `randomizeHeatbugUpdateOrder' Boolean flag we can
G" L. I' `% K& w/ t // randomize the order in which the bugs actually run
5 z$ e" I1 ]0 C // their step rule. This has the effect of removing any3 r/ a) Y3 r4 g9 {
// systematic bias in the iteration throught the heatbug
6 x% U$ F* U$ m# F) Y! [) G) `% [) Z // list from timestep to timestep( e; h2 S% k& s& V2 ^! r/ R
1 c1 b& ^/ `6 |0 {, a1 U/ u+ A // By default, all `createActionForEach' modelActions have
) r) ?0 x3 V7 B // a default order of `Sequential', which means that the
7 ^% p' O i9 }6 K // order of iteration through the `heatbugList' will be1 K& x5 B, V2 Z6 K9 i8 G
// identical (assuming the list order is not changed; C& }3 a* e5 ]0 S8 s- o
// indirectly by some other process).8 s8 _7 p1 c+ G1 _. x
# h% O: i" B7 Q+ m* F9 x- r; u( b
modelActions = new ActionGroupImpl (getZone ());, W0 o0 q, C# G3 z& I+ b
, F! i& }) \( V9 H/ v
try {1 o6 n- D h9 S k
modelActions.createActionTo$message
6 I+ R. c( b, Y9 w! |( z# w (heat, new Selector (heat.getClass (), "stepRule", false));
# d# P. B/ o/ e } catch (Exception e) {- a: r$ L' N5 h, v X
System.err.println ("Exception stepRule: " + e.getMessage ());0 X2 @; M, F; ^2 z, Y2 S
}8 B7 B& b( [( C
3 H+ Y% ^9 l3 | G- Q1 { try {
" ?8 {: ^& I/ K3 }! P/ ^ Heatbug proto = (Heatbug) heatbugList.get (0);
0 s& O3 L0 t' a" _% v Selector sel =
/ y; n! o& S( K' r1 T new Selector (proto.getClass (), "heatbugStep", false);5 h3 ^9 s7 T* ^4 _8 @- l E/ \. E
actionForEach =( ^& Z0 D/ w) m) |2 M) \; j5 } b
modelActions.createFActionForEachHomogeneous$call& v- _ V3 }% o1 }- N
(heatbugList,5 @* M9 C' \" }! m$ Z; p
new FCallImpl (this, proto, sel,
* b- m: n& w. V' q7 G. T' K$ R7 @ new FArgumentsImpl (this, sel)));1 v) \. b- `2 t
} catch (Exception e) {, v' S; f ? m* A0 L; y* u" M
e.printStackTrace (System.err);2 @9 c" F. }" F2 P$ K" y; z
}
( T# k) g9 F7 U% ]$ X
3 {0 u. S" w0 D4 a Z# r syncUpdateOrder ();
( L! b7 v1 }4 H4 R% i
0 b! M8 R' y, @ g) f$ Y: f/ Y try {6 h7 x2 ] ?+ v
modelActions.createActionTo$message
4 c9 } K, L4 a5 d% `0 P: l g (heat, new Selector (heat.getClass (), "updateLattice", false));
5 A% F" ^) F4 ?5 _$ q% L } catch (Exception e) {
N0 L- G$ }, B3 g" `2 E- w e System.err.println("Exception updateLattice: " + e.getMessage ());
; n! v5 H+ C8 B }
! O' m9 A8 q% q5 o1 r
3 Z( ]$ L. L& c/ A2 ]% o* d' ] // Then we create a schedule that executes the' g$ }2 S1 X$ C Z
// modelActions. modelActions is an ActionGroup, by itself it: J4 q5 C% F0 W( o5 [
// has no notion of time. In order to have it executed in/ o' |+ i& F* S7 V
// time, we create a Schedule that says to use the1 T7 L- b7 M$ C; N( W
// modelActions ActionGroup at particular times. This
& P n; w1 N; W# [' B$ x) _ // schedule has a repeat interval of 1, it will loop every+ S0 Q! u, U7 }, c) ^! C0 j% @$ r
// time step. The action is executed at time 0 relative to
9 [$ L" `9 y& E8 E z j8 C8 p# K2 d // the beginning of the loop.- k- _: ]7 r- |4 z: m
; P+ ~; I S; C* T/ b- {9 N // This is a simple schedule, with only one action that is( o8 ~9 b$ F: M% B
// just repeated every time. See jmousetrap for more
: @8 c8 {% ^1 H; i // complicated schedules.
. F' B8 C9 Z0 _# Y" t6 a+ H0 l
& h/ u/ q' \- H. @ modelSchedule = new ScheduleImpl (getZone (), 1);- s* ]4 I+ y/ A
modelSchedule.at$createAction (0, modelActions); X* L# u6 Y+ ?/ W
4 b5 ]0 g- i' |, b- E9 m# \( c: {( t
return this;3 c( o K" j8 i3 x$ [
} |