HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' @" Y% ~4 R& u/ _1 O% D8 B* o6 m0 @2 A; u. s) }
public Object buildActions () {5 ]4 ]% [1 V/ _, N$ X6 D( ]
super.buildActions();) R6 Q6 D/ s3 q
7 N# g- t9 T4 ?2 O) | // Create the list of simulation actions. We put these in/ O# q) d8 a; y; h) B* z5 t
// an action group, because we want these actions to be
1 q" I( @+ d# A1 w6 H$ { // executed in a specific order, but these steps should
; E3 D; n* B/ ?5 @ // take no (simulated) time. The M(foo) means "The message! k& a: ?, {; r3 w, g: [
// called <foo>". You can send a message To a particular
! S8 l+ |$ c: W6 H# @5 ? // object, or ForEach object in a collection.
/ v% v1 v+ k9 Q9 I6 K+ N $ t( h4 Q j* E, _
// Note we update the heatspace in two phases: first run
: ^+ M& T' | C/ Z Z* |/ Y/ ]6 z: o // diffusion, then run "updateWorld" to actually enact the
" m* u( {$ }4 F4 c/ O // changes the heatbugs have made. The ordering here is
" x Y T2 [0 m* w // significant!
4 y3 z9 f. A+ @2 p) d2 _
. l$ l+ v4 g3 W3 `" L- s$ ^ // Note also, that with the additional5 c6 U' Q; ^& u f7 f. o
// `randomizeHeatbugUpdateOrder' Boolean flag we can g1 A' |1 F, U# k2 S2 W# H' T4 v$ e; M
// randomize the order in which the bugs actually run9 B' V, z5 F2 Z9 ]
// their step rule. This has the effect of removing any, ]2 o% Z2 O' y6 N" a }+ B' e: g
// systematic bias in the iteration throught the heatbug! H( N" `; Y' J4 a/ G3 _/ P
// list from timestep to timestep/ m4 J6 ?8 p% C$ D+ M& i% f
* Z( a( }2 ?0 v, ~/ ~; T& k
// By default, all `createActionForEach' modelActions have5 D0 R1 y: t6 M* M
// a default order of `Sequential', which means that the$ t5 [/ ?% x/ R, e7 K: T. I
// order of iteration through the `heatbugList' will be
* s* u) T. `0 \) a( q3 U( A // identical (assuming the list order is not changed( L# r3 ?% D: t5 E
// indirectly by some other process).
* E a" [+ S6 ^$ Z! Z8 q7 `, w( r1 _
) V% @( C) b% m9 d modelActions = new ActionGroupImpl (getZone ());
' E, N+ i1 V: I8 C2 Y/ p& X: { _) F4 Z$ t$ y6 |: N; R5 Z! [
try {4 Q7 |: U6 T) U5 N: Y
modelActions.createActionTo$message, [8 H( T6 w" D6 L8 Z$ `; V
(heat, new Selector (heat.getClass (), "stepRule", false));
+ K( b: W. j7 I6 T1 i3 |% G } catch (Exception e) {! H9 Y- k: U% y% H1 r, [
System.err.println ("Exception stepRule: " + e.getMessage ());
9 G2 [1 T8 n. R; T }
* q- n# W% [6 r7 l2 {4 r o0 @8 s
; e: l: p. ]5 Z" c0 w/ N try {& N3 I+ y; t P# D* j! f
Heatbug proto = (Heatbug) heatbugList.get (0);9 H6 J1 K6 i5 I8 c0 i
Selector sel = , T P1 _/ a @7 O8 l5 H) ^' m* x, h
new Selector (proto.getClass (), "heatbugStep", false);3 a* b0 [2 _1 |2 B& ~( G
actionForEach =
$ x% M4 H& w8 [1 w0 w modelActions.createFActionForEachHomogeneous$call2 B( m0 x! l7 ^, O
(heatbugList,
! j; ]# e* K1 T% E) ` new FCallImpl (this, proto, sel,6 a# _! S3 i9 u) p& F
new FArgumentsImpl (this, sel)));
$ h8 c. k0 {3 w# b3 n6 \) w4 w; w/ S } catch (Exception e) {+ t3 M7 Z. q$ N* x* E9 ~- }
e.printStackTrace (System.err); d2 o' `/ w* ~
}# t* W2 F ^& u/ E# t) M
/ `$ _! v% t# I6 q5 I syncUpdateOrder ();, J+ X4 M" F: u; A& q) c! A4 y9 ]
8 z, K: k# U; P# s try {
, R9 U; k' ~! P modelActions.createActionTo$message 8 [" W' D4 J! d4 O! y$ {! W; k
(heat, new Selector (heat.getClass (), "updateLattice", false));) U& [3 ~! E+ d
} catch (Exception e) {& D, @+ V& N9 ]$ Q5 E3 x& T! ~! E& V) F
System.err.println("Exception updateLattice: " + e.getMessage ());/ w8 U$ h( R! K9 Y$ \
}0 ^# b2 q5 @. _% E/ V" S- d
% Z7 _5 S% r. e3 v9 s // Then we create a schedule that executes the, b* b+ W$ B7 f. i
// modelActions. modelActions is an ActionGroup, by itself it7 }% l: [& R2 t$ N. q! _ f, C8 _5 |- x
// has no notion of time. In order to have it executed in4 A1 d0 ^3 Y3 m) e9 u; o5 v& B
// time, we create a Schedule that says to use the6 g- P" A4 s' ]& A8 p# i, o0 ~% V. }1 i
// modelActions ActionGroup at particular times. This
& ^4 ~5 H, T1 e8 D; K( Z. ]0 Z // schedule has a repeat interval of 1, it will loop every
( S0 u* w+ l* o- {) H' q // time step. The action is executed at time 0 relative to
& m3 P, Q n) z2 i$ L: b // the beginning of the loop.* g) |( G2 g( W4 o- e1 p; n1 C
) s$ s2 c. v- g' `/ R+ e! K
// This is a simple schedule, with only one action that is
2 R( j' n$ {6 t; e" _3 x# o ^. E // just repeated every time. See jmousetrap for more, b& N' } D/ \0 ?9 B, @
// complicated schedules.1 a8 D! {8 Z# n" V
2 e' N x+ m8 h, a* y ?3 _
modelSchedule = new ScheduleImpl (getZone (), 1);
& m0 F& ^- e& G* Q4 ?; H3 q: v modelSchedule.at$createAction (0, modelActions);
: G8 `9 j& L$ O5 o $ E5 N, a5 A A+ b
return this;
. H; s5 Q1 Q8 k5 Y } |