HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ ^: C* U i% g4 H( j& z" P' z( Z# C5 T) g
public Object buildActions () {
. ~0 V s% a% }) G8 l2 ^$ X super.buildActions();- [( ~- H+ R, z
6 X2 X% t) D+ q! P, v // Create the list of simulation actions. We put these in8 \4 a0 f' O* c& g6 Q* a# ^& V% ?( b
// an action group, because we want these actions to be& U3 u, f5 z1 g9 [ L
// executed in a specific order, but these steps should; E, b" y! @2 z6 O" W5 D
// take no (simulated) time. The M(foo) means "The message
- n3 i- F( A& |; m- U // called <foo>". You can send a message To a particular
8 p+ F3 i0 m% T& o2 I D7 S N/ h // object, or ForEach object in a collection.
# \/ J, k5 g8 x/ R0 }0 i8 Z: {
l4 {2 B6 j. e: o8 a; k // Note we update the heatspace in two phases: first run
4 k6 r% z; c0 l U8 x // diffusion, then run "updateWorld" to actually enact the, _" C* |* L7 N A( D3 }
// changes the heatbugs have made. The ordering here is
, {3 ?% v4 ?8 H" L1 c/ Z. r // significant!
2 S( @( s# a6 }! ?
0 M$ g, y: j. u // Note also, that with the additional1 }: g/ p3 o+ H
// `randomizeHeatbugUpdateOrder' Boolean flag we can# m- N1 m9 C1 I: R8 q8 h" ^5 I
// randomize the order in which the bugs actually run J3 s* _! }1 r
// their step rule. This has the effect of removing any* b# J: |+ @8 Q8 ^9 B' N
// systematic bias in the iteration throught the heatbug4 U1 `) R, H% @& R
// list from timestep to timestep
( }5 l; Q+ |' f, B $ v% r5 K, C8 K, K& z+ B! \
// By default, all `createActionForEach' modelActions have
- u7 i. }% @9 { // a default order of `Sequential', which means that the
& n2 |8 `/ H m& b: z0 ~/ i // order of iteration through the `heatbugList' will be
( M7 h& G+ u: Y$ { // identical (assuming the list order is not changed/ _& w. F, J# m% m- }; s
// indirectly by some other process).* k9 o* I% c0 Q2 s: Y5 E) A j S$ E
J T; q7 s+ w% p5 o+ r+ }3 l modelActions = new ActionGroupImpl (getZone ());
3 p2 K' @6 v4 g! g6 k5 M8 ~% z% C, k' H! g, b4 }: o
try {
( f# r% r0 L1 y& \5 J3 c: i modelActions.createActionTo$message
$ D c4 Y4 G( b- S' H( o. X# R (heat, new Selector (heat.getClass (), "stepRule", false));
6 A% D, v) Y' l1 D$ x } catch (Exception e) {
& s. Q9 ?& c2 O# h# S- Q6 z System.err.println ("Exception stepRule: " + e.getMessage ());
# B6 A2 y' M m7 z }
' d4 n5 j' M9 \# C$ f k
% V. S6 M4 B9 ?; p try {
# d( z2 E$ ^9 z* D% Q" { Heatbug proto = (Heatbug) heatbugList.get (0);
: Q' Y% q* V# O3 G; v; p$ e% A Selector sel =
( T2 s) Q5 \/ P' X* r+ W; h2 v new Selector (proto.getClass (), "heatbugStep", false);8 k1 p* E* C1 Q& f/ i2 N# w
actionForEach =$ t5 |0 W8 F: n) C) | F
modelActions.createFActionForEachHomogeneous$call7 p% _. O( {# v: X$ Z9 L$ _
(heatbugList,
4 c7 z W* f& ^ new FCallImpl (this, proto, sel,
. B/ S" N' V/ m5 W4 |" v new FArgumentsImpl (this, sel)));7 } O) ~; Z/ D
} catch (Exception e) {, d/ ], q' J- T' r
e.printStackTrace (System.err);
5 O" ]: H: }8 Z. ~$ ^# Z# Q( F6 t }8 p. q1 c% ~/ M2 D/ Q
2 N' h5 q& ]- u syncUpdateOrder ();. d8 f q1 r8 ]: h
3 L5 ^* W8 c! C! x$ f! Q try {. R9 J9 A0 B; b. C. z+ n! ~
modelActions.createActionTo$message 9 ^# w* w3 K* G R* u* j
(heat, new Selector (heat.getClass (), "updateLattice", false));' |. j1 d' g5 U" m2 ?2 ?
} catch (Exception e) {
9 D+ T6 J8 y0 U. c+ B5 y+ Y System.err.println("Exception updateLattice: " + e.getMessage ()); j" y6 R. j* p m2 Q9 M
}" w# ^$ {7 q( ]0 N) P6 A* \
% x- _- @; ~1 \ a" D // Then we create a schedule that executes the* U; g6 z/ s6 [2 Z3 {
// modelActions. modelActions is an ActionGroup, by itself it/ G5 m4 c+ q1 t6 x6 X$ G8 l
// has no notion of time. In order to have it executed in* H9 T1 Y. @0 d' b; y0 u; x
// time, we create a Schedule that says to use the$ b, U% X( w9 T: s/ M. ^# J' L
// modelActions ActionGroup at particular times. This
J6 w: D+ s$ G* j. F9 P // schedule has a repeat interval of 1, it will loop every! x* z) Q: n; C/ k1 T: H) `, N; k8 q
// time step. The action is executed at time 0 relative to) x: A5 ]) M! N _1 N# |
// the beginning of the loop.
7 B' j5 S& A' d3 T: v
+ {) K a' j: {. f- h // This is a simple schedule, with only one action that is
. P+ H9 G6 f7 Z- t1 C( E // just repeated every time. See jmousetrap for more
' ~3 z5 q3 S v1 {- M$ h& h5 M // complicated schedules.% E, a3 j5 f# D; s, e. F
; j( _2 w1 D" P3 k modelSchedule = new ScheduleImpl (getZone (), 1);
0 z+ e) a5 C% S( X2 g5 T modelSchedule.at$createAction (0, modelActions);- }3 Y9 L1 W7 G B5 y& c$ Q1 a
2 ?, z3 E" ]% C9 [3 M% i
return this;$ J7 t( G& [) ?8 ]
} |