HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 T2 ^& B! ~3 a+ o+ [
8 ~$ t& L% A. R public Object buildActions () {9 ]2 j" @9 i( s5 d# X; Q) C
super.buildActions();% \6 U9 X* h% H' Y
6 h! Z5 ?8 f0 \4 b4 }
// Create the list of simulation actions. We put these in
6 e# B8 Y" S `, i* X' v // an action group, because we want these actions to be
- m" |* Z* h# s3 z, |, H // executed in a specific order, but these steps should
/ o6 J4 R9 _! S/ d: k. ^4 O8 ] // take no (simulated) time. The M(foo) means "The message, j. w0 E+ M8 M* _4 O
// called <foo>". You can send a message To a particular; b. l N$ N, y/ ~# [. L
// object, or ForEach object in a collection.
. V- Q! t7 z7 T
7 @6 N% H* [2 w // Note we update the heatspace in two phases: first run
3 R$ w8 x: x1 K3 W // diffusion, then run "updateWorld" to actually enact the
6 w* B! I( g `3 q" r7 B // changes the heatbugs have made. The ordering here is
/ C5 E( c* H/ O# O0 u0 R& ]* R! ~: S // significant!1 F" {+ d' U. u% {
6 [7 W. P) k: u8 G7 y
// Note also, that with the additional6 L9 j* D0 v- u A: y/ |, F
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 I$ V/ K t: G4 c // randomize the order in which the bugs actually run
; N6 o# y/ Q( d. E; I5 E3 Y // their step rule. This has the effect of removing any
+ C6 G. E( e) t% ~ T // systematic bias in the iteration throught the heatbug
8 t7 R ?4 `. e: o // list from timestep to timestep
1 G7 ~0 K0 i5 A: }/ w9 R
/ k( Y. P' Y/ @) b2 G& [ // By default, all `createActionForEach' modelActions have
% w. Z0 k( Z/ B% x, L1 W8 L/ D, \ // a default order of `Sequential', which means that the
8 c1 ^3 |2 O: _, L ~ // order of iteration through the `heatbugList' will be
, o8 ~% a7 u I7 v3 {3 \ // identical (assuming the list order is not changed
1 B& Y @6 M+ \1 v$ e" n& ?2 D4 h4 o/ f" C // indirectly by some other process).
! C/ g7 b2 e9 h; ~3 h 9 N; s" Y2 }( z4 V! W
modelActions = new ActionGroupImpl (getZone ());& d0 X- E' E2 O) R$ c
0 h7 [: d! e* S9 [ ?
try {- d' Q5 K" F3 {" X0 \7 |
modelActions.createActionTo$message
$ V3 V3 O; _% r2 J8 C (heat, new Selector (heat.getClass (), "stepRule", false));
6 V2 U% s8 K; S1 z" P# A! C } catch (Exception e) {/ {4 q! m1 L3 t0 r% F- ]4 R5 Z
System.err.println ("Exception stepRule: " + e.getMessage ());
# O: H, h! h* | }
" L! Y! w! Q9 Q: }# N
. t1 j& N: n+ @# I4 f try {( C% W' m k, C. v% T5 ^
Heatbug proto = (Heatbug) heatbugList.get (0);
/ ^$ \$ i* Z- T, `/ A; H& B Selector sel =
* v3 f9 l+ z. K* \" y- f0 ~! b new Selector (proto.getClass (), "heatbugStep", false);
! \0 n& H4 R+ U actionForEach =8 X0 ]4 U0 I0 k1 z' P' R+ p2 K9 Y
modelActions.createFActionForEachHomogeneous$call$ y f4 R8 f$ c
(heatbugList,2 r# R% U' i7 I- O$ o5 W1 @( @( g/ F
new FCallImpl (this, proto, sel,
/ p8 |3 A) b# o; W new FArgumentsImpl (this, sel)));
: C, t4 ?6 o. e- i+ g% | } catch (Exception e) {0 \8 ] M' ~- {1 s& I: |
e.printStackTrace (System.err);; S7 F% z2 R" P. R
}( e: r, r( L& T' }4 y/ F H
* J: M4 H# y* ~2 Q+ w N( X syncUpdateOrder ();
/ D$ N2 Q9 f1 N+ I7 [. T# f" H0 V/ ~ @* V6 [$ i0 N; T' W, @
try {% F: W, p/ L/ D* ?
modelActions.createActionTo$message
2 d+ n7 J, S, R$ a' d+ q* k (heat, new Selector (heat.getClass (), "updateLattice", false));
2 K: ~) ^) z! d4 p Y, P } catch (Exception e) {( U. M5 V N$ B% u5 |( h6 [
System.err.println("Exception updateLattice: " + e.getMessage ());: Q% A# u/ K2 p
}8 O1 f$ M! C! k9 o: p1 M
6 m4 D2 n# k! U0 h) l" j
// Then we create a schedule that executes the
$ d' h8 \) X8 r3 h: H T; S // modelActions. modelActions is an ActionGroup, by itself it2 }# N& T7 m* [3 F0 _
// has no notion of time. In order to have it executed in
' M- ^: Q; r9 f% `# a P+ _ // time, we create a Schedule that says to use the
. `: q E" V/ C8 x2 r3 [ // modelActions ActionGroup at particular times. This+ i8 ?/ N9 |9 V b7 x
// schedule has a repeat interval of 1, it will loop every
* z3 E0 O2 U" [# n; \) | // time step. The action is executed at time 0 relative to
, _1 _- _; P- }6 e3 P5 m // the beginning of the loop.
o1 Y! n" V8 a# x+ n: ~
7 g. }8 Q9 D# f6 d // This is a simple schedule, with only one action that is) V9 M# D" x1 D2 b
// just repeated every time. See jmousetrap for more7 {' ^: K% Y3 w0 r* y H6 D7 E, [, i
// complicated schedules. n4 x0 a) i& Q- r
7 W/ e6 ^, L- u5 v$ z/ E3 O modelSchedule = new ScheduleImpl (getZone (), 1);
, G/ K( ?( @; I$ m! T$ E1 D modelSchedule.at$createAction (0, modelActions);
, c& a, Z* P, b7 M6 u / j( J! i; E- E5 N" j, j
return this;) q/ n& m6 h$ B% J# v+ h3 O- X# M
} |