HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! A# ?4 b+ t* g5 E& M0 C
& | q$ m, m( L2 v public Object buildActions () {8 K: d) j" C+ o- C/ b( ?# }
super.buildActions();0 Y' d/ ~; i& H% C: p
) ?+ _1 F3 l0 u* I // Create the list of simulation actions. We put these in
0 g* X& X6 e3 C' @# k) `: a! I // an action group, because we want these actions to be4 m! T9 ` F0 r9 Q7 t; Y* a
// executed in a specific order, but these steps should
H# J9 |0 A2 [- O+ K // take no (simulated) time. The M(foo) means "The message
& R2 [: F" M+ `/ G7 p0 K k // called <foo>". You can send a message To a particular+ g! N2 X3 A& b7 K5 r
// object, or ForEach object in a collection.
4 @2 E+ Z0 F5 {+ m7 J$ V, @ ) P, Q/ w+ n3 p' S' X% b4 T
// Note we update the heatspace in two phases: first run$ |# Z) F% y: m: K! m
// diffusion, then run "updateWorld" to actually enact the- }6 { f* n4 Q
// changes the heatbugs have made. The ordering here is
! m& U4 h6 e5 D9 r8 P- S // significant!6 B1 [ l- a2 w2 E- b$ P
7 S% o* W+ s! Z( W
// Note also, that with the additional* t& n- ?" _# c R( U
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 {. \2 N8 c5 q* V2 H* Y" c$ l3 J
// randomize the order in which the bugs actually run g+ h5 @4 e7 K1 d/ g
// their step rule. This has the effect of removing any
6 z. n" N- v/ G V4 B& ^! D // systematic bias in the iteration throught the heatbug' Z& |% U" b7 g! ~1 F' b5 @& U
// list from timestep to timestep
0 O E9 D, B$ `& j" m
& v' O2 S. d/ C' f1 b4 M4 L // By default, all `createActionForEach' modelActions have5 B' X$ ?' h4 R6 d3 A
// a default order of `Sequential', which means that the
: Q. f2 V6 [% [( X0 E // order of iteration through the `heatbugList' will be
& `# B( {2 a @9 @ // identical (assuming the list order is not changed
2 n) d& {8 k% w0 M+ V // indirectly by some other process)." J/ H+ y9 u4 Q5 z. r) W$ }
8 X9 Y1 d) i- l2 B& ~2 \& i6 q
modelActions = new ActionGroupImpl (getZone ());4 T/ k. C- o% w5 Y
3 A7 M; R6 O) O4 e7 }* L) U try {0 L! J+ D* J8 E
modelActions.createActionTo$message) C% p0 Q# I" s, j2 F$ w5 n$ H
(heat, new Selector (heat.getClass (), "stepRule", false));3 z/ j9 V b9 c0 E
} catch (Exception e) {5 x z3 W3 R. o" \" ~& B/ Q7 @8 }
System.err.println ("Exception stepRule: " + e.getMessage ());: J7 x7 Y6 I2 f1 _3 Q/ J5 E
}
" u# p3 M9 b9 a0 `% o. F
/ l: g* t1 B5 X" J2 t1 | try {
% x% T: k7 M+ [, R$ ] Heatbug proto = (Heatbug) heatbugList.get (0);
' l% ~! D, Q; b7 S4 u7 ] Selector sel = 8 \" U1 H, [ ?% M9 V! t. |
new Selector (proto.getClass (), "heatbugStep", false);
+ v4 k3 u5 J; u! w# x: C( n5 ^ actionForEach =
- N* P" P5 Q4 B+ G/ `+ N- d' d2 i modelActions.createFActionForEachHomogeneous$call$ n1 {" w% p C
(heatbugList,
4 e& N9 h7 ^: n% o/ f new FCallImpl (this, proto, sel,
: p; ]; `0 @; `2 M$ t1 j% I new FArgumentsImpl (this, sel)));
) a& x8 v) f8 K9 b# a) k } catch (Exception e) {
( B7 B" ]% l" Y! p- o5 Q2 c e.printStackTrace (System.err);9 W4 d: s, Z" N( G; i, y% o
}
, E+ V7 \ W) i4 h2 N# K
( f8 I! J1 c9 ?/ _5 y- _: \7 R' T syncUpdateOrder ();6 a' U( k8 ]3 [5 E/ B
2 }& ?! N0 ~% P1 ] try {; z" h+ r4 q. f! _5 r; \6 a
modelActions.createActionTo$message
/ t- b; F$ @2 A" H/ a9 j (heat, new Selector (heat.getClass (), "updateLattice", false));; n/ E, t1 o* o/ m- M2 I
} catch (Exception e) {
, V* L& U7 w- C) N System.err.println("Exception updateLattice: " + e.getMessage ());
4 y4 j0 R! m0 r* ~+ A) O/ U }- ?. F5 _. Z6 V2 \7 T& r0 P
Z. t% L9 v2 M7 F) ~, L' r // Then we create a schedule that executes the
8 {4 i1 [: d8 y N! E d& E // modelActions. modelActions is an ActionGroup, by itself it% v' z( q8 L0 M6 U0 J: F2 M
// has no notion of time. In order to have it executed in
7 S1 f$ f- Z5 j$ s- k // time, we create a Schedule that says to use the* D; e0 `$ ]/ C* @
// modelActions ActionGroup at particular times. This* w: Y, X; q# ^( w9 f* b
// schedule has a repeat interval of 1, it will loop every
1 F' A {) v8 i8 H // time step. The action is executed at time 0 relative to, R2 `, H4 t% s/ T% S4 W8 A
// the beginning of the loop.' S: f( Z+ T, b7 M' l
! V: E, O8 ]' \7 c3 p
// This is a simple schedule, with only one action that is/ z# u& W1 |, s1 F
// just repeated every time. See jmousetrap for more
! A: g+ J- F3 p+ _4 o // complicated schedules.% I! b& l6 I3 O, s+ E! A
$ [7 D! H. D" j& t7 {2 O7 ? modelSchedule = new ScheduleImpl (getZone (), 1);
- k: |6 D3 q) F0 j$ N) ^ modelSchedule.at$createAction (0, modelActions);
" l% @! x Y) U - ^7 [% y% [% _1 n% C# N
return this;
) E, h' X" h8 {1 S8 X, i } |