HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. R/ ~! w& a6 e# Y1 u' w
6 L+ D, D" S6 @3 j7 M7 k9 c
public Object buildActions () {' a. S* X* O, A! t! t- s
super.buildActions();
$ V7 h: I. r ?, z* p. s: O, q b6 C
$ B& ?5 E- M0 J6 `) l- p // Create the list of simulation actions. We put these in
2 |4 v) U# y9 N1 f // an action group, because we want these actions to be* s3 }# U. U0 j1 F0 N0 @. n
// executed in a specific order, but these steps should
1 w' E T: f, z, q' j // take no (simulated) time. The M(foo) means "The message
9 J* V' K& D% l# h // called <foo>". You can send a message To a particular: X5 r) M- E; ~7 E5 o% }
// object, or ForEach object in a collection.! l; `7 K! E- w' q N$ e
+ }. b! q8 p+ u8 U, @
// Note we update the heatspace in two phases: first run
! g* R, o7 K+ w, R# f# |0 h // diffusion, then run "updateWorld" to actually enact the
% S0 n, [% M* c9 x0 L( b // changes the heatbugs have made. The ordering here is
+ C6 Z/ ~6 e& F* P2 c" M# z // significant!1 c) x3 W- A2 F8 S
( G) ?) d W' W0 Q+ o. u
// Note also, that with the additional
5 K: q0 h/ K* T6 @ // `randomizeHeatbugUpdateOrder' Boolean flag we can9 ]" T1 ]" W$ l* U1 p- q
// randomize the order in which the bugs actually run
: h7 T- a6 ^3 } // their step rule. This has the effect of removing any+ v& G9 ~5 e/ S3 L
// systematic bias in the iteration throught the heatbug7 b9 l* E6 F. T+ V. u) Q! U* z, T6 h
// list from timestep to timestep
5 E: M/ B) J# I6 {1 w
/ d8 R# c9 i2 S7 ^" g& T/ D+ \ // By default, all `createActionForEach' modelActions have
0 `' \) m( a) ^& f$ p" o // a default order of `Sequential', which means that the, ?4 X* [3 a* b% V4 O
// order of iteration through the `heatbugList' will be/ ?: T/ g+ \2 e) M) R. X& O
// identical (assuming the list order is not changed/ C: n A- E- N' @
// indirectly by some other process).; r ?4 {: I# E8 k0 V
% |: p1 G& ~/ }, ] modelActions = new ActionGroupImpl (getZone ());
5 X0 D* s. z9 h
3 x) O3 p! @# q' K7 r+ R6 R: i try {4 o( P2 q7 @6 F8 s" }% u" m6 X" o
modelActions.createActionTo$message
6 p$ L* g. q1 i$ p; I) R2 ^$ \ (heat, new Selector (heat.getClass (), "stepRule", false));7 l1 |$ G& f' o& k
} catch (Exception e) {
4 f) U& z. i, t5 H3 ^3 A3 H System.err.println ("Exception stepRule: " + e.getMessage ());: N2 Z. g% R! U5 B% t
}: F& I" B: L$ C
: b' t, G. y& }2 q7 ?
try {0 A& w7 r4 I7 V
Heatbug proto = (Heatbug) heatbugList.get (0);
/ o6 f& j- l6 R. b# [* { Selector sel = ! y. f* S' s2 q2 N0 L8 x6 ^# E
new Selector (proto.getClass (), "heatbugStep", false);
0 g' A( D4 u0 Y: D actionForEach =
0 U/ t/ J& Z/ m6 w modelActions.createFActionForEachHomogeneous$call
. Q' F: D; }2 k5 n+ \ (heatbugList,: r2 P+ B% S5 v6 r K9 O( I5 m
new FCallImpl (this, proto, sel,! J2 o, A. X9 Q
new FArgumentsImpl (this, sel)));/ K* ~6 b! j; m
} catch (Exception e) {+ ] k. S8 E: R% S, Q5 f6 r
e.printStackTrace (System.err); |' U) e0 a- q. Y8 D; X* a) }
}
; m6 c/ K' ?3 m/ t5 W. Z/ s - k& p p. A/ Z4 I0 |
syncUpdateOrder (); e) ^* V9 [' O- l! I- f- Z
* R& }$ o) a- S) I C try {6 I, m1 `4 i" o1 z3 T5 P
modelActions.createActionTo$message
+ J, r% e/ T5 |' o (heat, new Selector (heat.getClass (), "updateLattice", false));
3 V& A7 y, O# a; d } catch (Exception e) {
' G4 c9 Y. C( S `# q System.err.println("Exception updateLattice: " + e.getMessage ());0 P" t7 F2 d. U: |
}
+ s9 W8 _4 N5 e
& c6 {& l$ {/ }! w, U. Y5 g" \8 N9 ? // Then we create a schedule that executes the0 Y+ P7 ~% p/ Y; | R% G
// modelActions. modelActions is an ActionGroup, by itself it) ], j5 C" ^5 ~ w/ c! ?0 H
// has no notion of time. In order to have it executed in/ A# W7 C t3 I
// time, we create a Schedule that says to use the
' P+ [/ o+ ~4 M+ ~ // modelActions ActionGroup at particular times. This
X& Y+ l" }/ ^3 l( n // schedule has a repeat interval of 1, it will loop every
! Z# W; l2 Z+ `! J* _ K // time step. The action is executed at time 0 relative to
Q. p! D% i- w) R // the beginning of the loop.+ o/ d. k# V; g2 {
' O% H4 b y0 m6 P+ i; V# J
// This is a simple schedule, with only one action that is
0 j: {1 \3 o C // just repeated every time. See jmousetrap for more
7 G( R& w3 ^* ?) h5 {: [/ s // complicated schedules.
! t; U) i" Q5 P- k2 I
1 ?9 R$ k2 T% v1 S) o modelSchedule = new ScheduleImpl (getZone (), 1);; _: p n9 A, I5 n; H' }
modelSchedule.at$createAction (0, modelActions);
* e( L1 O# y1 L% \ N . b8 c; K3 F, x6 m9 q* i
return this;" R$ O" e& Z! v7 w6 v% p! ?
} |