HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ R6 _" ?: p, E, G: k4 v7 }$ ?9 |
/ ?7 o4 n% y: ?$ n
public Object buildActions () {6 e5 X( n/ c% p9 O+ `
super.buildActions();$ r5 _' I/ k/ T: K
# L" J; }9 K- P3 y3 o) H; q
// Create the list of simulation actions. We put these in! K) M; }& a2 r0 p. }& [ N
// an action group, because we want these actions to be
) q% Y3 G$ w8 l$ a+ | // executed in a specific order, but these steps should6 B. G5 k7 \) z" Y9 \& s
// take no (simulated) time. The M(foo) means "The message4 D8 }1 S" O* A' l# k1 l
// called <foo>". You can send a message To a particular
7 l7 j+ X, U% S/ c+ w2 }; Y // object, or ForEach object in a collection./ f- i! t5 ~ H, D% l- a+ B2 G
3 q, c- [) f4 n) N; F
// Note we update the heatspace in two phases: first run
2 I$ ?+ x& @, ^5 Y4 q+ v# C, } // diffusion, then run "updateWorld" to actually enact the( w& h, {5 h% M' r0 J
// changes the heatbugs have made. The ordering here is3 ?0 U9 r0 q/ V G, A3 }! l5 R
// significant!- h6 y% D+ Y# T# p
" j0 A) H' K# W
// Note also, that with the additional
* N7 H+ a9 X' f+ ?3 V // `randomizeHeatbugUpdateOrder' Boolean flag we can
; P8 A, S f/ E // randomize the order in which the bugs actually run; r7 K+ _1 F$ U U" c
// their step rule. This has the effect of removing any
/ A; R h. M t& `( }9 X! } // systematic bias in the iteration throught the heatbug' Z5 w) U. l( y2 E" V: A
// list from timestep to timestep
, w# y( r) e( i: e J ' J$ L \" J2 B( d, |0 x
// By default, all `createActionForEach' modelActions have, a8 n* W& r! w# k7 w: x/ b' }/ \
// a default order of `Sequential', which means that the. a. Z( q6 k/ ~
// order of iteration through the `heatbugList' will be# v( J3 d" X3 c/ S$ A
// identical (assuming the list order is not changed
$ ?: e' ]/ g4 z6 T // indirectly by some other process).
3 v, c8 ^" D. L# P4 l+ W/ f 8 H# u& x7 P$ S+ m* j
modelActions = new ActionGroupImpl (getZone ());0 R! U3 i5 f- z( w4 c& R
) t( i7 V9 l; G* k+ L `; g( P& v% \ try {
( R7 \4 O/ Q0 P/ L/ D3 F modelActions.createActionTo$message
- |; m1 r, k# v6 b (heat, new Selector (heat.getClass (), "stepRule", false));
# W3 m z$ G7 o/ [/ e } catch (Exception e) {8 |; m. N, v: |4 c
System.err.println ("Exception stepRule: " + e.getMessage ());& k! X; c5 g' `! j/ t
}/ J- E# k6 G% j: D3 M" \7 V# C+ x; p
9 c; } q7 Z; _( @3 W$ f
try {: l3 M/ _! k# {7 C/ k3 ^2 B
Heatbug proto = (Heatbug) heatbugList.get (0);2 K0 B3 T9 n) k
Selector sel = + K p& Y0 s/ P. {; h
new Selector (proto.getClass (), "heatbugStep", false);
0 y. F8 h e2 i actionForEach =
: }8 k- F8 B" i) @, c modelActions.createFActionForEachHomogeneous$call
' |1 j e3 y: i (heatbugList,6 F! |7 k, Q: t0 Y5 t/ p
new FCallImpl (this, proto, sel,& f+ r! h* x: z: E4 Z
new FArgumentsImpl (this, sel)));& g2 w( t. T2 G+ ]! |0 e
} catch (Exception e) {
% d5 V9 L1 M7 u/ x8 c2 E e.printStackTrace (System.err);' ^3 J# E- z: ?& m3 V
}
) X9 ^" b0 B* {; W* t
3 q! z# ~% y& H; }4 w syncUpdateOrder ();
$ }6 i' a m9 ^ r5 u& {; D* @4 k& K& i7 l. N7 u6 u
try {
: C u; o- Q+ u' y/ f3 Z& M6 Z# a5 o modelActions.createActionTo$message & f; V$ p. ~9 `4 j$ o
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 S- r6 R5 I# W* H: k& N% g/ F } catch (Exception e) {
' ?/ G: q* b+ _0 c System.err.println("Exception updateLattice: " + e.getMessage ());/ V( _( x0 q" X! d
}0 E( L% x% h& v; P* c' p+ }
0 M' s! d7 v/ O! m
// Then we create a schedule that executes the
" y4 H4 L9 Z4 t2 C, k) r. w // modelActions. modelActions is an ActionGroup, by itself it
- J E; D( q I6 I' f1 e: K // has no notion of time. In order to have it executed in
D' e6 O, ^4 F9 [1 H // time, we create a Schedule that says to use the
2 k, X. @( {) o; [! y // modelActions ActionGroup at particular times. This) V, I4 k8 K% A( Q' T' G
// schedule has a repeat interval of 1, it will loop every
% d2 K8 x4 j* U% Y1 m* a# a, D // time step. The action is executed at time 0 relative to
; {! B3 r/ I: I" e: I# O- G. w7 K // the beginning of the loop.2 f8 n g/ `: s9 W+ [1 B
: {, n; m8 R& t // This is a simple schedule, with only one action that is8 H6 U& q) l( i
// just repeated every time. See jmousetrap for more+ H/ `% t' O+ B3 K9 _- P
// complicated schedules.4 a! `( C/ Y) @5 S7 X, L( J4 `
' z) q/ x/ o5 v. m
modelSchedule = new ScheduleImpl (getZone (), 1);0 T0 Q8 l& f ]1 K* z! W
modelSchedule.at$createAction (0, modelActions);
) ?. K3 L4 C# A4 Y' d! M) F }4 f
1 j. h( }4 o' @6 Q; |; a return this;9 H# G, t% u2 v+ c
} |