HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: ~+ v5 f$ ~8 R4 u6 h" M* S6 Z8 s* _: Q! n7 F
public Object buildActions () {
9 Z4 @% F. p: w! D/ {$ W. K* L super.buildActions();6 V/ |1 w( ~( A& g+ g
' [% K7 G/ S) M4 }' @+ W6 f // Create the list of simulation actions. We put these in0 p. f7 j ?0 {) ]
// an action group, because we want these actions to be I, g/ m% I/ z+ a# _% @: R7 J
// executed in a specific order, but these steps should
2 P0 a; s! u# N$ n& L // take no (simulated) time. The M(foo) means "The message
: t3 |5 b+ L* ?; M% U p5 E // called <foo>". You can send a message To a particular
( q9 w2 P: a7 v8 z# o // object, or ForEach object in a collection.
6 g R/ x" D$ q( a . `: I/ i; U' P
// Note we update the heatspace in two phases: first run* J8 Z- I! n+ p W4 ~
// diffusion, then run "updateWorld" to actually enact the
8 _8 i! @( H$ E- f& } // changes the heatbugs have made. The ordering here is! ~% M1 E- F! g. A( X5 A
// significant!/ x' W- ]4 W3 D H `
4 e0 ^) F# O4 W6 I* S // Note also, that with the additional5 k7 R1 ?* ~: v" u: k) o4 |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
6 F; m6 v. Q( w& D0 R$ h // randomize the order in which the bugs actually run3 r1 n; E8 e7 B* ^# I8 E
// their step rule. This has the effect of removing any
% _, H" z9 l4 H // systematic bias in the iteration throught the heatbug! P2 h0 K8 S( r. Q: K8 o$ v8 {
// list from timestep to timestep
& F E3 f/ i' U( C+ {9 U6 E* ? % V% Y/ ?* c1 K" M6 {/ O6 `
// By default, all `createActionForEach' modelActions have& P2 @2 c$ p$ S& D. X. o: D
// a default order of `Sequential', which means that the
9 a9 j o4 Y7 G7 u8 z' N; ~ // order of iteration through the `heatbugList' will be" v u1 A9 n4 [# R2 E; X& v6 ?
// identical (assuming the list order is not changed' c' e/ K- _% [5 ^' U3 t% ]: C: w
// indirectly by some other process)." A9 {7 |2 W' m* I
" r% Y2 X! R9 {7 x) p, ?
modelActions = new ActionGroupImpl (getZone ());
6 r5 L% c/ D$ t4 u7 D% v0 W
& R& R$ H7 v$ j try {5 J( p/ ^8 Y. Z, \1 I' k, v: m. a a
modelActions.createActionTo$message; K' P$ p2 F. @6 y) B/ w
(heat, new Selector (heat.getClass (), "stepRule", false));3 H# J! v9 c5 r$ r4 b7 ?
} catch (Exception e) {$ u3 T' }0 z# J( x6 t
System.err.println ("Exception stepRule: " + e.getMessage ());6 X+ h; l) F, P, T
}" a# x; C0 h4 _7 g
3 C3 p! |$ A0 V& t2 ^; a7 o" j
try {
7 b: S8 q: _( }1 x) V Heatbug proto = (Heatbug) heatbugList.get (0);
* R1 U. m9 a- k4 f5 C8 u; o Selector sel = + b: h5 E# }+ E' z7 S+ X
new Selector (proto.getClass (), "heatbugStep", false);
+ \ k: b, E8 F1 N0 f1 P+ e actionForEach =$ J9 W$ s0 D' g5 _$ @" E5 d: ]
modelActions.createFActionForEachHomogeneous$call+ h1 v" o* u0 c/ ~; Z9 F) g
(heatbugList,
8 i7 C6 e) v4 e: e new FCallImpl (this, proto, sel,
( Z$ f& z @' J: A# _$ U/ _3 K new FArgumentsImpl (this, sel)));
) q6 x" H4 u1 P/ A' c } catch (Exception e) {
" T" A4 W/ Z0 q' c+ E/ A e.printStackTrace (System.err);3 E' j+ c# Q4 f. N
}
8 \% y* y# S9 W6 K6 t: l3 n 6 h1 t: ^; G# [* @: F" {8 @
syncUpdateOrder ();6 H9 y: a( C9 E) ^' [
6 t) ~% f' R1 i, B try {
; w: u; F+ k4 W. A0 |& L4 \ modelActions.createActionTo$message
5 b1 r4 Q- N5 `' Y (heat, new Selector (heat.getClass (), "updateLattice", false));
+ B; r# D) w8 I x4 \/ i } catch (Exception e) {
' ^" R- ^# s- K# ~$ ` System.err.println("Exception updateLattice: " + e.getMessage ());
3 k' l3 P6 \3 v2 k3 u& b6 p7 Z }
6 m' R3 m2 z* y% q- n
8 _4 W9 E! B' J* F' p // Then we create a schedule that executes the Y/ L& L6 Z6 K/ p$ ^3 T3 Y
// modelActions. modelActions is an ActionGroup, by itself it L- p$ J- J1 w
// has no notion of time. In order to have it executed in
9 B6 y4 o9 a3 u, F4 K) H // time, we create a Schedule that says to use the
% L$ w6 _4 p7 |) ^1 S" \0 F4 w( @ // modelActions ActionGroup at particular times. This4 e: a. [' L* X6 V2 |
// schedule has a repeat interval of 1, it will loop every, M; `3 X3 R7 N) h7 n9 l
// time step. The action is executed at time 0 relative to
; L* c/ u7 ^, F, E. F( }7 X) V // the beginning of the loop.) y* s4 Q; X4 a& u" H$ |
$ W A7 q5 I# M q y! [$ e
// This is a simple schedule, with only one action that is+ n0 u- s) B+ c3 | J1 }5 s
// just repeated every time. See jmousetrap for more& _, r3 l( M: s& w+ u5 J
// complicated schedules.
6 T( n* B* C+ A# e8 M1 j, @' b ( V8 y& {; E: o( \
modelSchedule = new ScheduleImpl (getZone (), 1); w0 \( S. q( ~7 y8 W; l# l) _) t! h, {
modelSchedule.at$createAction (0, modelActions);
, o6 K9 k) V. K0 O. w3 V; ]* u
# p6 S4 B. @$ M" D return this;
+ U4 z) l/ L% m6 X' G2 m } |