HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% L4 }2 b3 q# Q/ p) U/ [1 b8 _0 ]
Z8 A. y* t v. {5 e
public Object buildActions () {# w* o# v& l/ l: M# X
super.buildActions();
" L) n* }- _' R
# I ^" m6 z D( g& L; a // Create the list of simulation actions. We put these in
( L# J2 E: E+ A4 ~: E // an action group, because we want these actions to be# k+ _' P+ N! b$ @8 o: z
// executed in a specific order, but these steps should7 O7 ^6 `& }, w/ [/ a4 D' b
// take no (simulated) time. The M(foo) means "The message
5 @& Y: J) m8 p // called <foo>". You can send a message To a particular% a" ]+ b. J2 F; ?& i
// object, or ForEach object in a collection.
: L! X' b6 E2 U/ Y! C1 n; X
. ?. G* @" S" D7 |6 N // Note we update the heatspace in two phases: first run
$ b4 x3 ?; F2 R9 H: p6 O" H // diffusion, then run "updateWorld" to actually enact the
' A7 t: x; J6 ?2 Q1 [ // changes the heatbugs have made. The ordering here is4 g0 I1 o" x0 L! p
// significant!2 _* m" X6 N) U$ E" t
. B* k5 X5 f+ b( y" r. } // Note also, that with the additional0 J' p" ?# @, i! m$ a% l7 O& m6 R
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 t& i$ S$ R; S
// randomize the order in which the bugs actually run, I( d8 r# u4 r7 U) Q- @$ t
// their step rule. This has the effect of removing any
) F, O# {7 Z# r+ @, Y( \- W // systematic bias in the iteration throught the heatbug1 U9 o; o: H( {$ K8 N
// list from timestep to timestep/ d9 m( r: x1 o4 P. i' {: C
, B; h! Z- G+ a. `) N$ s" e; C // By default, all `createActionForEach' modelActions have' T) @; R1 P k. d8 i! ]
// a default order of `Sequential', which means that the
; X1 D0 a" z; ?. |6 D6 ~ C% ]) _7 N" ` // order of iteration through the `heatbugList' will be
% V4 [! H2 {* X( Y2 ?( [. u // identical (assuming the list order is not changed
. x3 w6 i' k3 s: p1 _% ?" u/ z // indirectly by some other process).; v; _0 w9 Y/ ~: J% R
2 ?* Y& \7 E) I( n5 E) Q; P modelActions = new ActionGroupImpl (getZone ());
1 d& v$ J0 {' c2 r* h9 K2 b5 I
' z7 Z d; n4 D4 y3 B) d. c) S; r try {5 ?6 Q" p. F5 h
modelActions.createActionTo$message; }4 Z- E4 `/ ~. R' R3 K8 X9 D
(heat, new Selector (heat.getClass (), "stepRule", false));! |, w B y' V5 W2 ^
} catch (Exception e) {
4 o: Q3 R5 e7 n8 z System.err.println ("Exception stepRule: " + e.getMessage ());
& S' d9 c! @4 Z8 C2 K/ A# n3 x. i }% v( [* Y& B1 x/ U: b) K
( \ C F/ f7 {# f, d% g6 Y; W
try {
% O8 Y& ^, h I- } Heatbug proto = (Heatbug) heatbugList.get (0);6 M8 I# p, e0 X0 _) W
Selector sel = 7 S: a. V; k* |; I" H
new Selector (proto.getClass (), "heatbugStep", false);
o' |! @3 m/ U$ K0 g actionForEach =
: G1 ~) W/ \; b( n* C: s! M modelActions.createFActionForEachHomogeneous$call
* E: Y$ I" h; E8 ]' d @* S" x (heatbugList,6 }% x/ D7 k* u6 D1 B. w* t
new FCallImpl (this, proto, sel,
9 r4 N8 J: t2 y* m! q new FArgumentsImpl (this, sel)));
$ w6 e H% ^( @& Q7 f# G( p } catch (Exception e) {: L; o) W& S9 @" f# m5 c
e.printStackTrace (System.err);$ E. p! p4 Q$ r1 A/ A* q2 t+ B1 Z
}+ B9 t$ |9 r! U
# U6 [! @6 l; t) U. N) d syncUpdateOrder ();7 Q9 w/ }: `# A: D8 x3 W
% H2 H# {% r8 e: L
try {
# P+ u$ Y4 r, S1 L" R( ] modelActions.createActionTo$message
]3 v! r5 B* k+ V (heat, new Selector (heat.getClass (), "updateLattice", false));
. o" a. }8 ]5 r9 A4 q" A0 ? } catch (Exception e) {
3 S5 _4 l% T6 b1 P4 H- _0 } System.err.println("Exception updateLattice: " + e.getMessage ());$ B" t4 J& Y8 o' C
}5 r) A, Q. M% ]2 j% ^
( V1 ~, y" ~6 q$ L* l
// Then we create a schedule that executes the( I, q& i5 N; X) w8 h5 k( g. B
// modelActions. modelActions is an ActionGroup, by itself it* Z4 b% c5 L! n5 S+ C2 L
// has no notion of time. In order to have it executed in
+ g! F; L/ T/ X# }/ a. Q9 e Y // time, we create a Schedule that says to use the1 x5 Q$ K- P' ] a' g( ]
// modelActions ActionGroup at particular times. This
0 C F! E6 i7 P2 Q // schedule has a repeat interval of 1, it will loop every
/ s2 R9 t# p; ^. N. H // time step. The action is executed at time 0 relative to: r, {3 q, M0 }0 I' [7 ?0 n* `
// the beginning of the loop.
$ P$ u g! H9 j! f0 b5 U- Z+ l% p9 I/ ^
// This is a simple schedule, with only one action that is
) a7 u" `2 ]4 g1 a // just repeated every time. See jmousetrap for more9 @* O7 Q6 R0 r5 d
// complicated schedules.5 B W, m0 N( c" N. j4 l$ w
3 \6 a% Z4 {. H8 x" O modelSchedule = new ScheduleImpl (getZone (), 1);: ]7 S. z8 Z8 q6 m" D
modelSchedule.at$createAction (0, modelActions);" k; M8 j9 s, z R' R: d
7 f% i. `$ @6 n3 ^/ M8 t& U+ i
return this;
, p: N1 t1 b# m4 y. U" C } |