HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( F! N& u6 L/ P9 v) e6 \
' ~: K% n4 m4 G
public Object buildActions () {
/ v% r `0 i2 h super.buildActions();4 f, t" r6 Y* T
( s$ s& u7 X. a E, U // Create the list of simulation actions. We put these in
+ N# H( f5 E: u7 ~ // an action group, because we want these actions to be
( Z' i9 S: g- @! J // executed in a specific order, but these steps should
) H% z7 R" q: J6 N& e // take no (simulated) time. The M(foo) means "The message
" V$ g* B m) N // called <foo>". You can send a message To a particular
/ U- b. V+ q% y$ X1 O // object, or ForEach object in a collection.4 N5 D$ \. X$ h( S7 v
5 q/ d$ o5 { W% d
// Note we update the heatspace in two phases: first run
0 K# w4 g' W$ m1 p2 v5 {) t2 g // diffusion, then run "updateWorld" to actually enact the
; Y5 ~9 [ i, {+ }, k/ F3 ?$ B- o // changes the heatbugs have made. The ordering here is; r: x) i7 p$ b G
// significant!8 \' _( R6 U/ i# k) _
4 F. B' Q4 F6 [# j) y // Note also, that with the additional
) [7 ^& D# D4 Y, m1 {7 m // `randomizeHeatbugUpdateOrder' Boolean flag we can( f4 A8 r, }, N6 m
// randomize the order in which the bugs actually run) R1 [# d+ f: ~8 f* T' s
// their step rule. This has the effect of removing any; s5 n. ?( n- D9 q- C
// systematic bias in the iteration throught the heatbug
5 ~& H! w* Z9 o: H, d // list from timestep to timestep4 R$ [! t% [: Q0 ?9 g& _
& V& `3 `$ i+ Y4 _! K // By default, all `createActionForEach' modelActions have
9 O! j4 a5 r+ k/ r // a default order of `Sequential', which means that the- r+ @8 n/ \) a1 j, I. o& r
// order of iteration through the `heatbugList' will be2 G3 d* w8 Z3 W* c' {. L
// identical (assuming the list order is not changed
- {( D9 x$ p0 P$ M( _: ` // indirectly by some other process)./ t1 O/ m# i+ D' R' }
/ m# Q8 n* {$ \% _! r
modelActions = new ActionGroupImpl (getZone ());, _* J! {8 B5 ~0 l
% A$ g7 m0 c# S' M try {
1 Z4 ^( p3 T! K modelActions.createActionTo$message
4 @" Y' D) D5 w3 ^" Q6 Q0 c# K (heat, new Selector (heat.getClass (), "stepRule", false));, O; Y: i( R5 c: U6 l; t7 L5 j6 Q
} catch (Exception e) {: J A2 K) U, x. ^% K8 B$ [0 K
System.err.println ("Exception stepRule: " + e.getMessage ());
. M) P$ H9 _2 ^( e- g }2 Y4 N# A7 ~, Q* @
; D. c* d) L5 h3 S9 Y$ t try {
; Y2 @$ @' ~! c6 O4 _0 ] Heatbug proto = (Heatbug) heatbugList.get (0);
/ L3 x. [! u8 F. I: g Selector sel = ! K7 C6 u7 e6 x1 V, F t
new Selector (proto.getClass (), "heatbugStep", false);
5 R; c5 ?/ N# R' V0 K actionForEach =
3 Q0 z" }$ E0 m5 v9 Y2 H modelActions.createFActionForEachHomogeneous$call4 T" ?: D# d6 \5 o
(heatbugList,! g7 G7 C' y( i7 ?, F) q& {
new FCallImpl (this, proto, sel,
3 J/ M" @% Y3 \; t* H3 A new FArgumentsImpl (this, sel)));
+ I5 L) P3 D# R7 A# W1 C( n } catch (Exception e) {! x2 m4 f: q# y& f7 P0 Q# \/ B" K, B
e.printStackTrace (System.err);
" }5 m. f' m9 O4 E } }
* c! r: L% d. A
4 J; e* Y. e) X2 E/ j' Q" Q2 r0 w syncUpdateOrder ();8 Q1 |9 c7 ]* |# D0 B
# o1 `0 m+ ]; [7 B
try {1 O* X4 Q6 t' u" `4 z
modelActions.createActionTo$message " H- D! H# A9 R$ w8 i/ r2 o, i; V
(heat, new Selector (heat.getClass (), "updateLattice", false));
& ]5 ]% g6 X+ E! U- B$ a: m } catch (Exception e) {# ^+ q6 y2 f% S$ t& e
System.err.println("Exception updateLattice: " + e.getMessage ());
% f) |5 z; U6 }4 D }5 Z1 |% ?2 G& D: j' N+ H6 O% n
5 @' R7 \) U, u. X g // Then we create a schedule that executes the
, O" E. S% Z; S // modelActions. modelActions is an ActionGroup, by itself it d+ q7 `7 l; v c3 \( J
// has no notion of time. In order to have it executed in
8 C& |$ _4 e0 ]% j4 B' m // time, we create a Schedule that says to use the8 |, k' H& p# f) l$ P
// modelActions ActionGroup at particular times. This
2 `: `5 V3 ?- V, b" u // schedule has a repeat interval of 1, it will loop every
+ V# i" W+ A) g! [) L // time step. The action is executed at time 0 relative to
: x3 y/ l% S7 C$ W5 U7 T+ A4 G% z$ v // the beginning of the loop.
7 l/ k- Y, U4 `0 I) ^9 a
( G; U8 s- E/ k( G5 Z# b( ~ // This is a simple schedule, with only one action that is2 ^3 o) h0 a/ D4 _; ^
// just repeated every time. See jmousetrap for more
. T2 z% s4 `( L+ x, ]. B // complicated schedules.. e" S' ~4 |% X. E5 Q
, ^5 l6 \- j6 }" x: r# C! J
modelSchedule = new ScheduleImpl (getZone (), 1);2 E. T3 b. A; u# y" I9 ~6 i
modelSchedule.at$createAction (0, modelActions);2 H# T3 c9 |1 x
# m6 ?. S( g N; } return this;# s+ B; {+ E/ j1 [0 V* Y+ Q* Q
} |