HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ K6 v3 c1 O1 T. a7 i" n
A, f4 v) g. e1 e% H; P2 j public Object buildActions () {3 g' u! W |3 p7 a/ _7 a0 {
super.buildActions();% c+ O: M3 X) ?/ E3 b
- {. }' ]7 e! ], w. ^ // Create the list of simulation actions. We put these in
! j3 h8 R& I2 @7 n2 I" Z; N // an action group, because we want these actions to be5 t3 c1 v2 t' a k! O3 b
// executed in a specific order, but these steps should
3 Z6 o1 f: _9 i6 E // take no (simulated) time. The M(foo) means "The message
- W, m' z' C7 J5 _* {' w' O // called <foo>". You can send a message To a particular$ l% q2 l+ d+ g6 F9 A
// object, or ForEach object in a collection.
1 b% z+ Q/ E0 F7 k + A% ^/ e: w% [( b
// Note we update the heatspace in two phases: first run" s7 |: e6 z: P/ g( `0 b, @# Y
// diffusion, then run "updateWorld" to actually enact the" ~. Z' V+ U. d) P# z7 @
// changes the heatbugs have made. The ordering here is+ s9 F D4 K" J- }& K
// significant!; b. U: _- E6 E$ u+ ]/ o
- p! J9 S; B( t- w$ H# T" x
// Note also, that with the additional
$ j8 f, u# P# D3 y; k // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ C, @& p0 l8 p1 r9 @- N // randomize the order in which the bugs actually run
3 K9 @' `8 F9 f4 ]! m# Z // their step rule. This has the effect of removing any
5 }' B6 e/ o H b9 h0 j" r5 L% \: y8 S // systematic bias in the iteration throught the heatbug
: h4 ?& T% Y8 e: `1 b- E. V // list from timestep to timestep
8 a" P- R- B" T+ d3 Z# ? w* P
3 ~( G2 C: _2 Q // By default, all `createActionForEach' modelActions have; W( I5 t2 |, f# l% T. o, q1 k
// a default order of `Sequential', which means that the' _8 Q2 R3 F% L: R$ a- |
// order of iteration through the `heatbugList' will be2 P! B7 V* u7 _* g
// identical (assuming the list order is not changed2 Q9 f$ [- h4 h% F4 @! U
// indirectly by some other process).0 Z# H; M: g3 Q$ a$ F
9 y$ Y) | {2 A
modelActions = new ActionGroupImpl (getZone ());
& j2 g1 n0 _) ]
4 \# G3 A8 o" d. Y4 U try {9 r/ q- L2 J9 K9 Y7 Y9 G. l8 P2 R9 p
modelActions.createActionTo$message
; z6 S1 K% b1 F9 L Y2 i (heat, new Selector (heat.getClass (), "stepRule", false));
* x/ }! ?1 ]' T } catch (Exception e) {
: |+ R4 M8 W# Z/ g- \0 Y System.err.println ("Exception stepRule: " + e.getMessage ());
/ P" H! _* J- ^0 c }
$ X1 _2 O. M0 {0 i* l, _ K# l, w$ [. {$ [5 Z1 |
try {9 I9 @2 S8 u5 g, v/ t! I
Heatbug proto = (Heatbug) heatbugList.get (0);# b- ~9 C# Y& e5 W% g* \5 X
Selector sel =
8 e8 k3 v7 ?. s. [$ S2 C new Selector (proto.getClass (), "heatbugStep", false);
- u. V+ A. n+ i7 G1 v, x2 z actionForEach =/ l+ h j" }" z1 Y; C9 ?7 p0 `
modelActions.createFActionForEachHomogeneous$call
. l! ~" o) `( [+ a7 J (heatbugList,, K2 U* s4 o% Q/ }
new FCallImpl (this, proto, sel,
3 b9 ?0 T! ~4 P/ g( p9 o4 X new FArgumentsImpl (this, sel)));
* J$ u/ P9 E" x/ [ } catch (Exception e) {
0 s' P+ t; g2 C9 o4 A( P1 z e.printStackTrace (System.err);6 B7 T- l z1 R5 ~
}; |3 {+ t& u" N+ S& u
, J3 }+ F/ D) C# I! v: N; E/ w% H
syncUpdateOrder ();0 [7 @# N& A3 [+ n# G. F* H
9 b+ R$ ^6 n5 Z! L, s5 S
try {
0 A( Z# I% x2 N5 X- V4 U modelActions.createActionTo$message ; S8 R/ F$ W8 Y* a
(heat, new Selector (heat.getClass (), "updateLattice", false));
, u" n1 N. i+ I: m } catch (Exception e) {1 L. b0 s" z. |# {+ k7 s1 D
System.err.println("Exception updateLattice: " + e.getMessage ());5 I2 F: S- @7 {& i: `- A
}
8 V5 Z& n2 Y( }! N0 R6 J5 _ 6 d1 r, {; W0 u' Z
// Then we create a schedule that executes the9 p# X3 z5 z9 P7 a3 {2 `
// modelActions. modelActions is an ActionGroup, by itself it
: Y3 T$ l' u- H( |; K, }- D$ n // has no notion of time. In order to have it executed in
2 V. L4 ?) N$ T5 H2 s, q, q // time, we create a Schedule that says to use the
2 {; @' B3 ~$ u/ { // modelActions ActionGroup at particular times. This
# n4 z0 Y* c v2 v7 t // schedule has a repeat interval of 1, it will loop every# @% i$ ?, j+ j3 f5 W# o! y1 ?
// time step. The action is executed at time 0 relative to- K- {) e# P1 _& A' ]7 V
// the beginning of the loop.
" b1 P. ~; M7 z7 V& `, m
. i' K8 _5 g* w2 y // This is a simple schedule, with only one action that is# p* v/ O4 e& E& L9 v- N* y: G
// just repeated every time. See jmousetrap for more1 G, l7 e2 ?6 v$ \2 y' H% i
// complicated schedules.
! L4 g5 p7 F. x5 g: h1 p
9 h% y& @! [9 B5 V, Q+ W modelSchedule = new ScheduleImpl (getZone (), 1);2 u9 D' X# j3 m2 p
modelSchedule.at$createAction (0, modelActions);+ B) J! t% w& c
! h. V1 P8 \! _
return this;: ~# e0 C5 q' U% H2 ?$ P
} |