HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; T5 e2 m5 `/ D9 q1 z7 A: }) q5 {' t
public Object buildActions () {7 @2 U6 z; z7 p
super.buildActions();, E, ~) r4 q6 L n* o B/ L
6 ? p' S8 L8 I( j3 n% o: d // Create the list of simulation actions. We put these in( I- L/ m9 V! G7 J; P
// an action group, because we want these actions to be; u) w" D( m5 P: W7 G4 \
// executed in a specific order, but these steps should
! s; e3 v+ Y0 r- f+ v // take no (simulated) time. The M(foo) means "The message) j# Y. z* ]/ Q b3 g/ X$ ^8 T5 \
// called <foo>". You can send a message To a particular
; l" `" Y/ c; ?- Z m // object, or ForEach object in a collection.
3 o5 I T! [" |: r+ E+ u" o
1 w# j' X' U* f) Z // Note we update the heatspace in two phases: first run
# p2 C7 n" O* p3 w R // diffusion, then run "updateWorld" to actually enact the
( v& r" a/ Y" v$ J. f# ] // changes the heatbugs have made. The ordering here is& i% y, W, P, S5 A; {
// significant!' v6 S4 `3 [5 r# @8 }0 Z
H, \1 h6 S: j" ~% l // Note also, that with the additional
8 R" y8 C# h" A1 C; t' w" s' T // `randomizeHeatbugUpdateOrder' Boolean flag we can
# o0 a8 J" N1 i // randomize the order in which the bugs actually run
, _( Y! I+ P# V3 J0 N. P: {" Y( a // their step rule. This has the effect of removing any' S2 d' t0 w2 ^, e' A
// systematic bias in the iteration throught the heatbug' F7 ^) a4 D" D4 u# I
// list from timestep to timestep
: @( H9 {, p; z- t! N* F 8 y! @3 W+ j$ v4 U* [5 R9 M
// By default, all `createActionForEach' modelActions have$ x& T9 q& q! L: h1 B
// a default order of `Sequential', which means that the' a- C- C8 J' ? H# j, o1 `/ j& M
// order of iteration through the `heatbugList' will be0 E! \: c& z5 N( u! ]
// identical (assuming the list order is not changed
( V- a" @, L. N9 I& x7 N' Y // indirectly by some other process).
- b( h: i/ D' a 7 F' C6 W3 G( G0 Y
modelActions = new ActionGroupImpl (getZone ());9 W# w1 }* W; k" _
/ O# q( r3 P/ U6 Q9 h+ R# i# q5 { try {
" l Y8 l: h$ v, | k modelActions.createActionTo$message# ^( e7 `9 V6 \( x$ k [1 v. V
(heat, new Selector (heat.getClass (), "stepRule", false));
8 @5 m4 ?' h4 b6 X; o } catch (Exception e) {8 R' M' F1 I& M, e3 y
System.err.println ("Exception stepRule: " + e.getMessage ());
- U; ]: |3 ]1 ?# U% [. f, B }
% r, O" q. x4 X1 t6 k# E/ s0 Z
; C& J( j1 K: l( m try {% v4 m; B8 o/ r* m. S2 y6 B
Heatbug proto = (Heatbug) heatbugList.get (0); T+ r# r+ ?5 F6 n
Selector sel =
* [+ I3 M& M. X: D% d& r& } new Selector (proto.getClass (), "heatbugStep", false);, O: c; {: [' R6 _2 N; j- F
actionForEach =
$ b5 Y- G- I1 R& {1 c, @8 @ modelActions.createFActionForEachHomogeneous$call
) O5 z Z. R+ \8 B( ]* W- C+ C (heatbugList,
. V- N: A2 }# e8 D0 {( A new FCallImpl (this, proto, sel,2 K/ q3 _0 ? i5 J6 J
new FArgumentsImpl (this, sel)));
9 [! [, V% m9 n- K# a: z } catch (Exception e) {
7 ~' D3 p5 N* L* x+ t e.printStackTrace (System.err);8 y' t% q; j3 Y- ?# M1 n6 X7 u
}
) ]1 P4 I+ E9 h0 T( | " T0 _; M0 `& k) C7 W. ]6 F
syncUpdateOrder ();* ], ~# h# J/ V, W
, ~) B! n* m# Z3 y a try {! f" p- K0 c- P2 |+ ]
modelActions.createActionTo$message
7 H8 V; |6 n% Y6 X (heat, new Selector (heat.getClass (), "updateLattice", false));
( L$ P7 J S8 R1 N2 j. U, v } catch (Exception e) {8 M C& ` `- L$ b6 |' {
System.err.println("Exception updateLattice: " + e.getMessage ());' z" s6 _ T' h, K# r/ S
}
& D& P# [5 E" n) m9 r9 v7 j
& @8 Y, ^$ x6 M" c# x/ h/ ? // Then we create a schedule that executes the# Z) s7 h' G+ a( D3 a
// modelActions. modelActions is an ActionGroup, by itself it
$ e) c& C/ [/ a6 w; ^& a* A1 v // has no notion of time. In order to have it executed in
, E/ z5 T' K Q& V7 P% f+ r$ w& \ // time, we create a Schedule that says to use the
/ v" s' y5 B; ` // modelActions ActionGroup at particular times. This! H" n N8 R3 U5 a% V7 U
// schedule has a repeat interval of 1, it will loop every& V6 i+ W) c$ ^: F
// time step. The action is executed at time 0 relative to
- ^! H& P$ W. J% G' Z // the beginning of the loop.4 }0 S+ _; t s( e' y9 X
# Z2 a" x3 G" V9 I G
// This is a simple schedule, with only one action that is
/ ~' E# G8 ]1 v7 o- x // just repeated every time. See jmousetrap for more
5 K0 U! ]" ?% o; N1 c: v0 L // complicated schedules.) k5 O% g- ^% l/ l; x& T
9 ^3 b5 s# X9 a" q5 O) g5 B% ^' `/ F
modelSchedule = new ScheduleImpl (getZone (), 1);2 v: ]! a% e4 V
modelSchedule.at$createAction (0, modelActions);
% Y3 n$ \+ L' p: f8 f5 D ! x! q. S1 f9 d0 t( `( F: ~" [
return this;
7 ]: }+ N% ?1 o, ] } |