HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ W7 Q+ b8 m+ c% o0 t
6 V3 y$ m9 @2 |2 k9 C* K
public Object buildActions () {4 D; _. ~" W/ L7 P3 l5 R2 V
super.buildActions();
- _2 z3 x& G+ e7 a/ h" }1 U% N ! q6 b" j' [' e7 Y
// Create the list of simulation actions. We put these in
0 T: M5 i$ Z# B5 ~4 R/ t+ L // an action group, because we want these actions to be
0 c' [ J# ^! E4 \8 j1 X // executed in a specific order, but these steps should* `, _8 f* x9 \$ t
// take no (simulated) time. The M(foo) means "The message& I" s; L% }- v; @$ C
// called <foo>". You can send a message To a particular5 L! _. \: w* s2 L( X! s" q$ v
// object, or ForEach object in a collection.
( b n" Q9 E4 H& V: I5 w6 p * r( q9 q8 K& }$ d4 q$ s
// Note we update the heatspace in two phases: first run
! n$ t3 t, J' }1 T, K+ @ // diffusion, then run "updateWorld" to actually enact the. N; [1 y; P% B# P& }( n9 z
// changes the heatbugs have made. The ordering here is
/ R, ^7 g; D |, Q4 `* s // significant!
8 b" J Y- Z, i' n- u6 r " l6 D- U5 t5 I' o
// Note also, that with the additional
( f7 j0 |; _2 G; h _. U // `randomizeHeatbugUpdateOrder' Boolean flag we can' F0 F- Z" z1 b9 L* I( | ], b
// randomize the order in which the bugs actually run
4 _! o3 j* r% _- m9 L* e R // their step rule. This has the effect of removing any
3 I* _: K' r% s3 Q! Q K // systematic bias in the iteration throught the heatbug; a9 }5 w& O4 j- P% x+ C7 X, j; G/ p. y
// list from timestep to timestep
7 [8 I# O+ B' B# @6 x& `7 k0 G
. O' L G, ]3 B" M6 H // By default, all `createActionForEach' modelActions have Z- r# Q$ M! O
// a default order of `Sequential', which means that the% I* O( m& l, b
// order of iteration through the `heatbugList' will be
/ S v; n! Q3 _8 ]. _/ s // identical (assuming the list order is not changed! l& Z1 f! x5 k& T9 R' P
// indirectly by some other process).2 @" S) d; S' a# c
& s7 V: K# Z$ b: I6 c2 h5 Z modelActions = new ActionGroupImpl (getZone ());
! Q1 m7 \( h6 O' ] R8 \ B8 j' k/ i" g% ?8 \0 Q+ l
try {
* X K: z1 H: B# | modelActions.createActionTo$message* g$ T. X/ v. f6 f+ a1 R* x
(heat, new Selector (heat.getClass (), "stepRule", false));# U4 D( j4 @: Q# O! j9 G
} catch (Exception e) {
4 @+ s2 v" h2 S6 j! }+ P System.err.println ("Exception stepRule: " + e.getMessage ());! E# x( H! u) ~
}4 o* h7 X& ?$ w" q' q6 `
; t& I" }' M, B% I' ]
try {. M$ y4 }" t0 h# W
Heatbug proto = (Heatbug) heatbugList.get (0);
( q( t3 C2 P0 M Selector sel =
& o/ S8 |3 n1 D9 V: P& j new Selector (proto.getClass (), "heatbugStep", false);
. A5 f) \; r( F; \2 j( I) t9 J- z6 n actionForEach =9 L$ f- j. o' v
modelActions.createFActionForEachHomogeneous$call0 u) Q% K" y Z9 j1 j) z3 {9 e
(heatbugList,( p) O- b$ F/ j. n
new FCallImpl (this, proto, sel,7 L+ ^9 _' d/ i& B, m2 u/ V
new FArgumentsImpl (this, sel)));, q: B! T' {; `6 ~$ S
} catch (Exception e) {5 Y& P8 V9 d, }! m4 b
e.printStackTrace (System.err);
( b: r- ^; W5 T1 {, n } x5 O# `* m! P+ M+ m2 R- B3 r) t
* f0 u4 k& ~8 E5 D: ]. j syncUpdateOrder ();/ r; Q* O1 `% i. `4 B2 S
4 C/ v! J5 U! Z5 F! G6 f- r
try {
0 Y# z6 b$ _/ m( f7 d modelActions.createActionTo$message
( S' J+ ~* s, A5 w; r" Y7 ~& p (heat, new Selector (heat.getClass (), "updateLattice", false));
+ s7 v+ q4 E7 a. H U1 k# [$ ] } catch (Exception e) {! j% F9 N% X% z
System.err.println("Exception updateLattice: " + e.getMessage ());
6 K' e& c" N% H8 T }
) F6 I; C) S) h+ \
7 @& y* U8 @; {( K // Then we create a schedule that executes the' w* I3 A7 M1 g% {" I; H
// modelActions. modelActions is an ActionGroup, by itself it% v/ U/ {0 E/ u# w' e, r
// has no notion of time. In order to have it executed in2 G! c+ D, J* w( v q
// time, we create a Schedule that says to use the
: v4 s" J3 [3 R9 l9 {( S2 i // modelActions ActionGroup at particular times. This1 m8 L4 i9 O) W; H) o# q4 T: V
// schedule has a repeat interval of 1, it will loop every* X# Y) [5 E3 x. m7 k
// time step. The action is executed at time 0 relative to: h: x* [4 i; Z1 k
// the beginning of the loop.; O% z5 B0 u) {
4 c4 o- Y; h7 V' Y( k5 ]
// This is a simple schedule, with only one action that is& H3 B$ Q: R. I- B \3 @
// just repeated every time. See jmousetrap for more p" p" K. Q$ i$ D: p; o
// complicated schedules.* q( n4 ^% l8 j# x" f: ]2 f- Z7 j. L
( `% H5 z9 I9 p8 k8 @3 \6 K modelSchedule = new ScheduleImpl (getZone (), 1);
) V( l& @2 x, g modelSchedule.at$createAction (0, modelActions);
( S. w4 {! `- K. M) Y, U
( g) ~( Z- M Q% f return this;
7 f2 i" g& c8 ` } |