HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 i! ~) Y$ X2 ~1 q- t( G- ?
& L; `0 V r$ v5 Z: C public Object buildActions () {
+ Z! K! b, ]# b& v' y7 Z7 C super.buildActions();
8 O: `+ F/ y2 p( E, H # n& h+ @" ^% N) ]. E
// Create the list of simulation actions. We put these in
* b" b: u% V, l1 ?9 R6 ~9 L // an action group, because we want these actions to be5 M' ]$ D. F e& q6 k6 J& x
// executed in a specific order, but these steps should4 [& z& w$ y- K; w7 b# L
// take no (simulated) time. The M(foo) means "The message& `' t% U* L; Z+ e4 f
// called <foo>". You can send a message To a particular7 x% W; Z; s: {4 c h$ w: [! F
// object, or ForEach object in a collection.3 R* s ]3 |8 j. v: a
/ m; |# u8 g6 z9 n% C
// Note we update the heatspace in two phases: first run
" s+ w) k1 P! r! l // diffusion, then run "updateWorld" to actually enact the. ` C4 Z$ L/ r8 J; H) x
// changes the heatbugs have made. The ordering here is
: L" B+ O! e4 s+ X // significant!
) i+ K7 j5 x* s9 s' d( C3 f
4 ^5 q, k) I; a3 j // Note also, that with the additional0 Q I! n* }7 D
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 W0 {$ I) W1 p! _
// randomize the order in which the bugs actually run
- r$ U3 [; |6 w$ I // their step rule. This has the effect of removing any1 ]7 k. U5 I6 k' A) C9 \3 K8 e2 F
// systematic bias in the iteration throught the heatbug/ Y4 |3 Q! f% ]
// list from timestep to timestep- ?) S; _& z1 j7 @6 y
7 ]# s' q+ K1 `1 S4 j% J // By default, all `createActionForEach' modelActions have
5 H H- i8 U2 t // a default order of `Sequential', which means that the
7 w- B+ s0 S3 j // order of iteration through the `heatbugList' will be
) \/ J! {- |5 [9 D // identical (assuming the list order is not changed
' S( I& c7 z4 S% y7 v8 ] // indirectly by some other process).+ Q6 T" m6 h# \ K
! [! I8 L% `3 [3 @ modelActions = new ActionGroupImpl (getZone ());
- Y. Z1 f' V) j$ b8 |. a- Y
, \& q/ [8 g! _3 k J/ n2 n try {* E6 S9 R3 s6 R S' j2 Z
modelActions.createActionTo$message
- S/ D$ [. C2 g/ G! L) g4 } (heat, new Selector (heat.getClass (), "stepRule", false));7 \0 _% B4 Y+ f4 t6 C5 S
} catch (Exception e) {
* E% G3 q% W3 W( ~5 f System.err.println ("Exception stepRule: " + e.getMessage ());. W7 r/ ]) c) I1 a% F/ e
}
' P9 Q" _8 Y+ u1 C8 g+ f8 W) S0 t
3 A# B8 i) H" }( a. ~0 L try {2 Y Z* @! e! T! c( A
Heatbug proto = (Heatbug) heatbugList.get (0);
+ |0 J! e9 I$ `; V$ n* ~ Selector sel = - G$ Y) i- i6 u( o8 N+ p' O
new Selector (proto.getClass (), "heatbugStep", false);
$ ?" G( Q( Z& l$ ^# K actionForEach =
# A% Y! k/ W. f+ w& A modelActions.createFActionForEachHomogeneous$call
* Q v& h* v9 r1 P* x# [; p (heatbugList,2 [. K0 L% D! r0 L; u
new FCallImpl (this, proto, sel,# @5 I* R, m/ ?5 _
new FArgumentsImpl (this, sel)));9 `4 Q7 L6 M* l5 {8 A: T6 n# a+ P
} catch (Exception e) {4 v1 S) x; \0 x( J8 P% J& ~
e.printStackTrace (System.err);8 Q" n& n: e+ V4 \1 Z7 w$ `7 {# L
}
6 [: j5 W) |1 D( t( G8 z/ } 7 v8 [3 _6 q l- a8 o, k3 d
syncUpdateOrder ();" f+ b# K4 E' P j3 v, |" v5 K
E+ R/ I# j7 i0 b3 `+ H try {7 ~9 V! G. L, H% x2 v% V; O
modelActions.createActionTo$message 1 i2 O, K2 k9 F! R% ]& d
(heat, new Selector (heat.getClass (), "updateLattice", false));" F$ J$ i7 X. M4 `+ ^/ Q* U( H& W, }% A
} catch (Exception e) {$ u8 d$ F. c# E; P8 |
System.err.println("Exception updateLattice: " + e.getMessage ());
( o) f2 X/ G& V" N1 d) s }
! E, j+ G1 c J6 H! _% e ~3 U. q / A7 F T+ X+ |2 i/ c4 h" h
// Then we create a schedule that executes the
0 M6 @3 K3 x: E8 g9 D7 O // modelActions. modelActions is an ActionGroup, by itself it
/ k& n# w+ e! }6 q: K& }6 o4 A0 { // has no notion of time. In order to have it executed in
" U; S" I/ Q, Y$ L // time, we create a Schedule that says to use the
8 X; s H$ ?; E# k* B$ `! m- W$ o // modelActions ActionGroup at particular times. This7 F3 O$ B5 C% f
// schedule has a repeat interval of 1, it will loop every
# p( y5 y( C6 {& q& X // time step. The action is executed at time 0 relative to
5 f3 t5 \8 ^' X' B5 v // the beginning of the loop.( b' p! o0 k, t' c
- N3 ~& Z' V6 b: A; Q // This is a simple schedule, with only one action that is
9 @! y# ~' d9 P // just repeated every time. See jmousetrap for more2 D9 Y4 N, M# g9 t# l M, \( {* _! _
// complicated schedules.
' j0 l/ I/ r0 Q0 X3 P2 q3 c' W
$ r3 g a- C& ?0 R1 G" [) a& e modelSchedule = new ScheduleImpl (getZone (), 1);
! } z& d+ W7 F7 B modelSchedule.at$createAction (0, modelActions);
% w4 r0 M* J4 @2 j! c9 ? , f& h* I/ R) n1 b
return this;, S4 f- |5 A m1 i6 C
} |