HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% x' C3 f; N8 ~/ g3 d9 O( a3 H
, p) e- k3 ^: v7 R public Object buildActions () {
7 g7 D& R4 c2 k# l" N/ w super.buildActions();
5 d5 x: N ~; h3 s* U+ \- [ : y1 p7 b4 |# e0 Q. T
// Create the list of simulation actions. We put these in, ^& C) G( y" n: I
// an action group, because we want these actions to be7 V" G# j7 f" r0 e& e- g' D! M
// executed in a specific order, but these steps should- ]# r' i' Q7 h7 W6 Y
// take no (simulated) time. The M(foo) means "The message
% [$ B* L) }; j( B7 i // called <foo>". You can send a message To a particular% K b4 M* [( S; N" e+ _% a
// object, or ForEach object in a collection.
5 s! h! L1 A+ {2 Y$ a& ^
+ V# P4 f4 d$ j. C' a // Note we update the heatspace in two phases: first run$ k* A& c( L5 R7 n4 o' i! N
// diffusion, then run "updateWorld" to actually enact the: W0 N$ ~, ]& F+ r0 |8 e
// changes the heatbugs have made. The ordering here is! Q' k. M, p# u1 ]+ X# o
// significant!
+ h5 p9 D" K" @: w
' B6 _7 ^" u9 F2 J- L1 C // Note also, that with the additional
6 ?& ^% d2 [% ^( m2 {& t // `randomizeHeatbugUpdateOrder' Boolean flag we can- q: b. x4 I$ V8 T
// randomize the order in which the bugs actually run
; |# [5 k8 ?4 x- _ // their step rule. This has the effect of removing any
! k. a0 g f* T0 \8 b. { _ // systematic bias in the iteration throught the heatbug! D) N- J( Z3 J1 T0 M9 _! q
// list from timestep to timestep
" }6 a5 G" w& u( F d! z6 p / b9 @! i0 N& d& v1 b* ~' f
// By default, all `createActionForEach' modelActions have2 j8 ~# @3 t3 k: k; x- H1 x$ O
// a default order of `Sequential', which means that the
& e, N' d, @$ E5 v5 d5 V- Q( {% p4 } // order of iteration through the `heatbugList' will be
8 e1 v! ~& D* F0 `/ l( q // identical (assuming the list order is not changed
* c5 F5 |$ Y { // indirectly by some other process).; P1 H/ @9 [+ J4 D# }
2 q7 [" x( l* W5 o. F
modelActions = new ActionGroupImpl (getZone ());
# C' R r: a6 u: H
8 w- m8 J& M0 G R$ X) ]- y w try {
@' o% M- ^% t; w modelActions.createActionTo$message% h3 {. Y V( ` k
(heat, new Selector (heat.getClass (), "stepRule", false));
: M! ^, Y$ g/ Y4 i4 R } catch (Exception e) {
+ h1 K0 i" _$ \ System.err.println ("Exception stepRule: " + e.getMessage ());
3 N( v6 d0 h6 w3 b9 ^ }
# b7 H# K ^& e: ~5 h
, G$ Y$ b8 U, [4 j( Z try {
3 E5 R2 Z- ^6 ] Heatbug proto = (Heatbug) heatbugList.get (0);. c7 f( d: r: } K8 o( H9 r
Selector sel = $ g4 D% ]% J; H8 y, k3 o# c" S
new Selector (proto.getClass (), "heatbugStep", false);7 I( X5 D. Q$ g7 |& F1 O
actionForEach =
; \3 B! P: _! Z modelActions.createFActionForEachHomogeneous$call
! A* a% w* c$ p4 O% Z8 m% o (heatbugList,5 z( r% C. @& N& D
new FCallImpl (this, proto, sel,
7 V: P" J# n9 u+ X `2 N6 _/ M# _5 Y new FArgumentsImpl (this, sel)));
( L7 U3 }* z" k& m3 B } catch (Exception e) {8 i- h$ j' E6 \0 z7 O
e.printStackTrace (System.err);* D. E$ C% w U# d+ K0 P
}2 w$ r2 J7 g% p0 _" A# [4 _' f, n
6 t* h$ j3 b: q$ G" C. v
syncUpdateOrder ();
; l+ I" K" x- e B% ^( F& a) O* M c
try {
4 Q: {+ ?: |5 x0 L* N- o. n4 v* w modelActions.createActionTo$message ( d% k! j% I+ s" w3 U r7 K
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 R* Q( [2 m* G1 e3 W& f } catch (Exception e) {
1 G( c8 b6 J8 i" U System.err.println("Exception updateLattice: " + e.getMessage ());' l, ]4 C. x3 ^0 M
}, |2 R1 I: n+ q; G8 _
4 _+ I3 W4 K# [ // Then we create a schedule that executes the
) b9 e$ l" ?- _7 ] // modelActions. modelActions is an ActionGroup, by itself it; Q. x! x. X+ }0 y( S0 `
// has no notion of time. In order to have it executed in
& e, H; z r% |) h ?: J) v // time, we create a Schedule that says to use the9 n# y4 c( E: |* v& N
// modelActions ActionGroup at particular times. This, \ Q1 B% ^* B: k
// schedule has a repeat interval of 1, it will loop every
" v9 z7 e3 s! |; D' H! F9 D // time step. The action is executed at time 0 relative to N# u$ z. g4 P, M; B
// the beginning of the loop.4 w" K% C$ e! W N$ f0 L9 L& D" Y
! |! E. p' p; x# f% s' r5 x
// This is a simple schedule, with only one action that is
! B3 ^4 y7 J- n% Z. \5 a# _ // just repeated every time. See jmousetrap for more4 H' K6 }! ~# ^6 N
// complicated schedules.
/ ~+ M h' Y; P! ]: E0 X4 {" M# k" F& [; M: N 9 r: P# S, v! F9 V
modelSchedule = new ScheduleImpl (getZone (), 1);
/ |1 {6 u) U' o5 F9 Y modelSchedule.at$createAction (0, modelActions);6 F$ t9 b) e# g+ K3 Q q6 Q
: W' b) W! g9 w( |9 U
return this;* m, {- W2 F% g4 ~" o0 R1 O4 m
} |