HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ \) y7 m+ ^0 q; m' B/ K! U* @, n8 r9 _ [, H! n$ D% Z
public Object buildActions () {
% R% o5 V$ B9 F% C [ super.buildActions();
2 R3 ~' U7 F5 E% r( g) X
: }+ i( M: T4 b) K" z6 Z3 n$ t // Create the list of simulation actions. We put these in
/ v4 K6 E' g; U5 E6 Q( G // an action group, because we want these actions to be w$ s: G1 r$ K% r1 E: F
// executed in a specific order, but these steps should
. `$ u0 p) [* u" M5 Q // take no (simulated) time. The M(foo) means "The message
8 s4 e5 O, D8 D; }0 c. D# G // called <foo>". You can send a message To a particular# ~" F, R, v- N" ?! \7 G; Y
// object, or ForEach object in a collection.8 R* U8 f9 U( S, d6 g0 b
& d1 D# n* q+ o+ X6 d // Note we update the heatspace in two phases: first run, _: n% o% H! u$ e& S* y
// diffusion, then run "updateWorld" to actually enact the% E& x* `7 Z, I% [# Z
// changes the heatbugs have made. The ordering here is
- J5 }" E+ A% k+ x0 w3 K- m // significant!
$ E# o" b I& J! g : ?9 } ^0 _/ g/ \0 D8 K% u0 k" S
// Note also, that with the additional6 Z/ {* }4 \. |& K
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ Q; F+ z8 a* C* | // randomize the order in which the bugs actually run& `& u4 O! A3 h: {4 g" m, H7 }, o& @3 @
// their step rule. This has the effect of removing any+ [' ]6 g- T* b& c" g* f
// systematic bias in the iteration throught the heatbug
9 `6 w1 x; m5 x, Y // list from timestep to timestep8 s; K0 z6 u% Q9 J: [
2 J9 M2 I' l% j5 r+ O // By default, all `createActionForEach' modelActions have
! B0 y' d; v0 y. { // a default order of `Sequential', which means that the
* w% F% J9 A7 u" h6 ^! X& \/ Z) C7 ^' i // order of iteration through the `heatbugList' will be1 i& T5 ~ g8 ]6 @( X: B
// identical (assuming the list order is not changed ~2 {; |; F/ W$ D- A/ x- n
// indirectly by some other process)./ ^( B8 R! i: J0 s
* o" i% Z5 z$ W5 N* n" p7 B2 f0 C modelActions = new ActionGroupImpl (getZone ());/ j0 d1 R& T2 w
7 H: c' P5 `- A8 P8 a
try {5 e5 W, ]+ D H) C& c6 q6 P
modelActions.createActionTo$message
f6 P% y d2 y& G# t4 m* W# h! h (heat, new Selector (heat.getClass (), "stepRule", false));
l$ H: i- q1 x2 L } catch (Exception e) {2 k+ R. {+ \3 j, e8 l
System.err.println ("Exception stepRule: " + e.getMessage ());9 }9 m, z1 m! ^4 Q* G
}* h' C& k; B6 X: H+ j) ^
5 Q6 C* C. f6 P try {) I) D9 n; {) Z1 _0 a8 n/ J2 I( ], V
Heatbug proto = (Heatbug) heatbugList.get (0);2 \) g7 q0 d i k8 K ~# V
Selector sel =
4 R2 F% L2 Y5 q) ] new Selector (proto.getClass (), "heatbugStep", false);
: j, G; V0 G6 R/ p0 B actionForEach =9 B5 U) Z; b# ~- g4 |1 k0 _5 H
modelActions.createFActionForEachHomogeneous$call
! B6 J2 v% ~( j7 G2 Q, S' I (heatbugList,3 B1 s. H) [3 j" K
new FCallImpl (this, proto, sel,* W! }) f' N$ U. `7 n
new FArgumentsImpl (this, sel)));
# B3 m5 _% {: @. ?1 Y3 |& {& p } catch (Exception e) {/ T: V- W4 I- M+ {" x
e.printStackTrace (System.err);, s( r5 X- M. Z% D/ y
}
" q+ r# \) F i( L. N! Q9 x
( B D8 K4 S1 u2 `! X7 o! b ` syncUpdateOrder ();
) |" d! N A9 \2 h& Q, [8 ~2 G8 `* W
try {
* i8 J3 h" p% C. j! ^3 { modelActions.createActionTo$message
/ u9 ]" Z7 ?+ C5 e# A) U (heat, new Selector (heat.getClass (), "updateLattice", false));
. F6 x' W) V6 U K' j8 @$ W } catch (Exception e) {$ v# Y) | J; o
System.err.println("Exception updateLattice: " + e.getMessage ());: @# p: L. U3 Y$ [: h) ~2 h
}- G! }& l) G0 H$ `5 _0 Z% v
1 J# Q( _! ~4 a
// Then we create a schedule that executes the
+ l1 F, W$ C i% A4 k# T // modelActions. modelActions is an ActionGroup, by itself it
. T6 [ L4 ^3 ^8 `& A" E* R$ a // has no notion of time. In order to have it executed in
4 V' E) Q% z ~- k% e // time, we create a Schedule that says to use the) z4 c; b5 z' W* l4 g; e
// modelActions ActionGroup at particular times. This- T* Y* j5 D: x
// schedule has a repeat interval of 1, it will loop every" k1 j2 Y4 Z: |" t4 _
// time step. The action is executed at time 0 relative to2 [3 ~7 W: H' X. V
// the beginning of the loop.
~+ l" ]7 c: E" }% h: y7 j) X; d
; T9 N) ^, r0 j" P, C9 w // This is a simple schedule, with only one action that is
# T8 D, X) Q- ~3 S // just repeated every time. See jmousetrap for more' Z6 V& p: V$ I5 W' S* @7 w
// complicated schedules./ c _" z& `0 _0 h& B) L8 X
( F/ B5 `3 W4 D6 Q+ C# [* B3 D: t E modelSchedule = new ScheduleImpl (getZone (), 1);
+ [. l' r% f7 m: [6 z2 I modelSchedule.at$createAction (0, modelActions);
; k) u1 z* t2 ?/ q% ^ c6 E- y# K! E
return this;3 q/ D1 N m! o1 U; V
} |