HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 _. K2 q1 e$ t
# E5 {# u) ^" Y. o
public Object buildActions () {& }+ S( Q7 i$ j4 I
super.buildActions();
6 u k' b2 d% W/ Y: c
6 S% ]+ T2 |! ]6 q // Create the list of simulation actions. We put these in; G$ V% i2 O; y. u6 k4 u* s
// an action group, because we want these actions to be
- k! q! G i- V* Q- b // executed in a specific order, but these steps should: A/ B+ A7 {( {4 J, D" | r4 S @
// take no (simulated) time. The M(foo) means "The message
$ g0 L8 [2 r: j! F' o7 r // called <foo>". You can send a message To a particular/ W; g. S, V# ]& }. Q: m y5 L# |9 ^1 m' Z
// object, or ForEach object in a collection.6 \- n% J0 l( ^- X
# W* q7 Z6 o) Q: A$ M4 A
// Note we update the heatspace in two phases: first run% C# l/ {1 `& \ e9 ]* `
// diffusion, then run "updateWorld" to actually enact the! x7 ?1 N# {) @9 x7 ]8 ^
// changes the heatbugs have made. The ordering here is) W$ [) q9 M. J' ]2 S
// significant!
. ^1 O# h% c: {/ ` f4 Z: z* H 3 `2 `( W) B! m
// Note also, that with the additional
! Z4 q8 t9 V# K9 [; ]$ g& K, n // `randomizeHeatbugUpdateOrder' Boolean flag we can7 `7 n2 [; x4 D/ h8 D G* d/ Q
// randomize the order in which the bugs actually run, T$ X% y% F! Y! h0 q* |+ h
// their step rule. This has the effect of removing any
) Q% G; @1 O8 T; O // systematic bias in the iteration throught the heatbug. {2 f2 d1 C+ ?2 Z, }9 G* M
// list from timestep to timestep: H/ W: `1 l. E n3 P0 \
1 @: q3 @- ]7 M. Y
// By default, all `createActionForEach' modelActions have
( N0 d5 [$ Y% j. }: ~8 x$ z, l // a default order of `Sequential', which means that the
. p9 S7 ` H) T/ N9 r( C- j // order of iteration through the `heatbugList' will be
* ~- i! j5 |& I4 g# w // identical (assuming the list order is not changed. a. ]0 Z7 z' r* r# W$ I9 X3 \# t) y
// indirectly by some other process).4 K+ W" p5 L. F2 r5 d
+ _7 p. K6 x8 }8 v) k7 g8 l9 M modelActions = new ActionGroupImpl (getZone ());& C. [" X' M" q9 l2 b
% {$ v( m" g% o0 @( v! V try {
. q# `% s: b4 u0 |9 M" | modelActions.createActionTo$message h& p$ d' ?" t. R5 n2 D* g
(heat, new Selector (heat.getClass (), "stepRule", false));
. q9 E" [/ o5 h, _/ X( [ } catch (Exception e) {
) }8 s" `' D2 C. w( T, i4 ~ System.err.println ("Exception stepRule: " + e.getMessage ());
4 i' s* @2 n2 W }# P8 |5 f2 z/ l, o& m' A
0 w- ^+ m2 {4 M0 x A' X+ t try {
. ?# y1 q' ]! d Heatbug proto = (Heatbug) heatbugList.get (0);
) g4 B5 e: W+ o: v1 k3 S Selector sel = 6 x1 W; J+ H$ V6 T
new Selector (proto.getClass (), "heatbugStep", false);
. X& T: ~6 J7 z% h; l8 \ actionForEach =$ Q; d9 q8 Y6 ^5 n+ a$ s3 H5 ^
modelActions.createFActionForEachHomogeneous$call
0 n! x6 q& C1 M( a (heatbugList,) g; Y: N0 {: T: w
new FCallImpl (this, proto, sel,5 @* j- V8 O2 A+ A
new FArgumentsImpl (this, sel)));
% d; ]& L- y4 K) X1 a } catch (Exception e) {
9 o# }7 U8 G1 b4 h3 `! E e.printStackTrace (System.err);7 N; _% s& M( `+ L
}
1 J, Z& l9 j* j7 P" L
, s. A6 U, E! k* N, H# G syncUpdateOrder ();
% t* u5 s, D! j! L# _% d# ~9 ?
- G& f+ Y# ^. X2 k3 T' s ` try {: j/ z' l# z; E0 h' ~
modelActions.createActionTo$message ( {) w1 M1 a, ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 t/ n9 |& N% H9 d5 H' y } catch (Exception e) {/ S6 q& r1 M: Q" ~- r$ A4 x: ^
System.err.println("Exception updateLattice: " + e.getMessage ());
- j, W8 f# _6 O4 G( X% [" S }
b' M3 p6 ?" @4 k3 B4 \0 R( i $ A8 W0 `( R9 `# O8 `
// Then we create a schedule that executes the6 p# c: Y0 J+ q) d Y: R
// modelActions. modelActions is an ActionGroup, by itself it
- r' A- \& l; K% ~* Z! A6 X // has no notion of time. In order to have it executed in
+ ]( q l1 e* f E0 @4 J // time, we create a Schedule that says to use the
9 q* z. M: w9 M' ]- Z1 w: ? // modelActions ActionGroup at particular times. This
* B& \4 E2 J2 j+ u // schedule has a repeat interval of 1, it will loop every8 U) p/ y+ P p3 r
// time step. The action is executed at time 0 relative to6 L5 w* S K* N* m) g* ~4 h
// the beginning of the loop.3 Q- p5 j3 t6 n9 q" V" ]
& A" X5 ~9 e: R J' o0 g
// This is a simple schedule, with only one action that is6 ~$ d, b4 j9 T' K: o
// just repeated every time. See jmousetrap for more
" o I/ O' X; H4 C7 w8 X+ Z* ^ // complicated schedules.
6 t6 a0 L0 B1 u% x8 S1 h
8 N' ~: ?* ?) j modelSchedule = new ScheduleImpl (getZone (), 1);
; o% V8 @4 O: O% B4 ~8 { p/ m# q modelSchedule.at$createAction (0, modelActions);
$ z4 }& q+ R1 S& D5 i7 u% L
& {2 Y4 N% Z% W% `: J* @* l return this;: z; o& z6 T+ ^1 d! J& I3 D$ U) f
} |