HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* Y, ~1 r& m' Z1 [- t% x9 l! a& ]" p% n) T8 \
public Object buildActions () {
) Y7 u6 x- m+ I. N super.buildActions();$ |/ z7 Q1 J# q) b5 y7 [1 B
' @# ]. y! D# l l9 } // Create the list of simulation actions. We put these in* h, b- C8 ?0 g0 R/ C* K4 ]' j6 [! ~
// an action group, because we want these actions to be4 e' l8 P, ~: N
// executed in a specific order, but these steps should" F; X* v( t7 l* y4 W
// take no (simulated) time. The M(foo) means "The message
$ q3 q$ |/ N1 Z$ G: L2 ?4 N _0 Y // called <foo>". You can send a message To a particular5 T) f) v& z- V, K5 |5 R7 q
// object, or ForEach object in a collection.
! U* h, m) O" I/ C- W/ _
# S' J$ B F; ? // Note we update the heatspace in two phases: first run
$ F$ F# Z, } c6 F1 w* x // diffusion, then run "updateWorld" to actually enact the
. b3 q7 M$ B# c // changes the heatbugs have made. The ordering here is
( U Z: P1 x2 T! t( o* |& D // significant!, F* \" r" n# A
0 ^7 ^' W; M) k6 P( Q/ a+ y
// Note also, that with the additional! m' a8 @* V K8 z4 z; r
// `randomizeHeatbugUpdateOrder' Boolean flag we can; p9 S9 M! z( v# [
// randomize the order in which the bugs actually run+ F# }7 ?* u' o# E
// their step rule. This has the effect of removing any' ?) J% [ n. x" N ~0 y) P
// systematic bias in the iteration throught the heatbug
4 L( N$ W0 ]$ _1 Z g // list from timestep to timestep# Z: \6 ~; |* a, h# _
( l% U5 E) P# c2 U // By default, all `createActionForEach' modelActions have
0 R7 P% s$ q; n$ Q" {' \0 r+ m% ^ // a default order of `Sequential', which means that the) O4 W* x/ b7 X/ L( }* H
// order of iteration through the `heatbugList' will be
0 c; m0 {# k2 A. {% I7 n5 D$ D // identical (assuming the list order is not changed/ Q9 r; l8 h$ f2 f
// indirectly by some other process).5 Z4 \" Y' d0 Y0 l
3 C! L" f' q$ a$ v modelActions = new ActionGroupImpl (getZone ());
* ?; |- @2 d" Y% I, D9 d; x' c- x/ E# O5 G9 t4 ^% M
try {
0 d- R9 W8 K/ G2 C; ], c modelActions.createActionTo$message
4 w/ {" \( M$ V+ a (heat, new Selector (heat.getClass (), "stepRule", false));- U% j4 @+ A8 Z$ E
} catch (Exception e) {& c6 Z X, N d) A! \
System.err.println ("Exception stepRule: " + e.getMessage ());
* n# {. H7 k! X$ v3 ~ { }
6 P6 ]3 C. y% ?/ i$ }. A8 @5 Z# o# s0 M3 g
try {0 |, \2 ]7 h6 ~$ R
Heatbug proto = (Heatbug) heatbugList.get (0);! X9 R5 O) r ?, F3 e
Selector sel = ( j4 }9 e* x1 q' j' ^) [
new Selector (proto.getClass (), "heatbugStep", false);; z2 V Z- i8 A
actionForEach =
) D5 g% o' m7 M modelActions.createFActionForEachHomogeneous$call
& [2 n# B3 |. D (heatbugList,
, ?* v' c/ l0 m3 E! i new FCallImpl (this, proto, sel,
" |5 A+ h! d4 J4 j# q new FArgumentsImpl (this, sel)));5 |2 w5 ]' K1 H
} catch (Exception e) {% U+ P6 g f5 U6 ?4 g
e.printStackTrace (System.err);
; s' i) L7 D+ C9 b& B4 @ }
+ j' n% u- K! ?6 u* B3 \ 5 ?. e2 Z. K; Q& E
syncUpdateOrder ();
6 O% t( q, l9 L) |3 [
1 J" `4 Y( A8 |; _- t try {
/ ?3 K2 L7 b+ M0 W0 v% Z: j; y( w& m modelActions.createActionTo$message
; \- q7 G. t* z# f" k3 Z (heat, new Selector (heat.getClass (), "updateLattice", false));+ o1 p/ w, Q5 \
} catch (Exception e) {$ _5 Z: Y. e1 L3 C, w+ t2 e+ k5 Y
System.err.println("Exception updateLattice: " + e.getMessage ());
! l& a" J. y3 B1 ^* ]. u }3 b5 d% u8 x2 T6 G2 i6 [
6 h$ _- O8 U& J) H // Then we create a schedule that executes the
" h+ ?0 p: d. D* j, v5 H) k/ P // modelActions. modelActions is an ActionGroup, by itself it. F7 M5 [6 S' z
// has no notion of time. In order to have it executed in
+ o4 x( G% s1 d2 q8 s- u3 \: F // time, we create a Schedule that says to use the
- ~3 J- d! O, H/ H9 w // modelActions ActionGroup at particular times. This
$ s) L3 u& n5 b- \7 p: ^ // schedule has a repeat interval of 1, it will loop every" z& q e4 F( F4 \$ F6 T) g0 b/ x
// time step. The action is executed at time 0 relative to2 j. I) \1 \. g+ I! Q% y* a
// the beginning of the loop.
2 J1 g# m3 ~, [+ u" l2 k! t0 R- I! h d" I9 ^8 G
// This is a simple schedule, with only one action that is% f/ P, J- k/ d! s/ h
// just repeated every time. See jmousetrap for more
8 v) y C4 w" @- P' I- J% [+ \ // complicated schedules.5 z k" |1 G6 u6 F
1 f, G2 t6 _! ^+ R5 ^
modelSchedule = new ScheduleImpl (getZone (), 1);
+ W {7 ~3 Q l [$ m, E4 G9 e7 V modelSchedule.at$createAction (0, modelActions);
# N$ @& v0 s; k# d9 `8 C
7 G$ [& g: a0 B/ x2 l return this;
7 C) j# b8 ]0 |$ _5 N } |