HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 Q4 n @6 o$ S8 t6 L# |! G' G+ t' i
public Object buildActions () {
* r: T% R/ }: N, U super.buildActions();
8 U" a9 a- X/ M5 A2 N. s, p " c+ m- a2 k7 P8 k2 @
// Create the list of simulation actions. We put these in8 \& E; ?( a- o
// an action group, because we want these actions to be& } W! o+ F/ K4 m S1 i
// executed in a specific order, but these steps should
& `3 `4 o0 Q l Y7 U; B% w+ |! O // take no (simulated) time. The M(foo) means "The message
. r, }" n5 k. A- T3 r // called <foo>". You can send a message To a particular
7 A; N- Y6 ~, [# }2 ?6 ] // object, or ForEach object in a collection.2 f1 Q0 X( l+ p
' _6 b, W3 Y; z) W* \: b
// Note we update the heatspace in two phases: first run6 x$ L) ]0 a2 G% H: k
// diffusion, then run "updateWorld" to actually enact the
- G) [8 a# R/ r" d* v" k; K( R6 k // changes the heatbugs have made. The ordering here is' D2 |; V3 G9 U. c
// significant!
* u( ^" w& @* ~0 `
* `8 \) J( j8 T5 O ~ // Note also, that with the additional
1 r; ]! q8 |( Y, ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 ?& j' x6 w0 t' y% |* X // randomize the order in which the bugs actually run; H" i' k! D% Y- m, P2 u
// their step rule. This has the effect of removing any9 p F8 t) I& a7 w
// systematic bias in the iteration throught the heatbug' @ e) l& V( l6 \6 {
// list from timestep to timestep
* {$ V, v6 s- L6 B3 m1 X" [( P+ A 6 w" {+ P+ ^2 u
// By default, all `createActionForEach' modelActions have
3 m+ r! p2 a4 A4 c) j // a default order of `Sequential', which means that the
" D o; A, Z M C // order of iteration through the `heatbugList' will be# G. b, U. E! t
// identical (assuming the list order is not changed p$ o; x+ w" p. j( O
// indirectly by some other process).
Y+ S* w9 a* @6 `: K
$ }3 Q; T0 w* i3 m) X modelActions = new ActionGroupImpl (getZone ());
: ~3 a6 g3 ?: e" X" S6 [
- g: N9 R8 e1 o% p try {3 N- J0 s, ]% L: r4 ~# S6 H
modelActions.createActionTo$message# S+ h6 ^% M6 O# m
(heat, new Selector (heat.getClass (), "stepRule", false));
5 f0 a r1 m6 `- K2 J* h2 p } catch (Exception e) {
' \+ D) Q) f4 Z4 C0 g3 g System.err.println ("Exception stepRule: " + e.getMessage ());
" X1 N/ I7 \0 g8 V- I2 a# u, H% \ }( y; Y" U, n) ]7 b
' _- g" s5 H S7 H" ] try {$ ?+ Z# Q: p2 s' t& ~ z* I
Heatbug proto = (Heatbug) heatbugList.get (0);9 T' }: u" S# e f
Selector sel =
* q( ]5 w- e4 W- f, D/ n new Selector (proto.getClass (), "heatbugStep", false);
+ i4 p4 k/ e& l- H actionForEach =: @8 G- R5 A( i! v4 M! `
modelActions.createFActionForEachHomogeneous$call7 k0 m2 }$ s: l* G T
(heatbugList,
( }7 u6 c) O. x: C new FCallImpl (this, proto, sel,9 F6 @3 r( P- A) I( `( O
new FArgumentsImpl (this, sel)));
" b* |# c! c5 @5 M T& i% ^' D } catch (Exception e) {
3 k$ Q9 g: g# J# y$ G e.printStackTrace (System.err);
, w7 k& t* E+ E; o' O( m: c3 B9 w }7 Q7 }$ Y5 D3 Y" w. j8 R0 N
% }' y$ N4 ]; H$ E* D. f# G syncUpdateOrder ();
0 y; o6 I: Q, K3 ^) W
# f/ K- r) @6 R- u& z try {/ Y# G# G7 ?# F( _
modelActions.createActionTo$message
6 ?$ ?* c1 R/ |- [ (heat, new Selector (heat.getClass (), "updateLattice", false));0 H8 G2 E0 @7 X2 h( p: R: E
} catch (Exception e) {" M/ }2 Q8 A1 |; n% ~; ~! c4 _
System.err.println("Exception updateLattice: " + e.getMessage ());" h- h8 ^! y, P2 j+ S+ t4 d- x
}
* U0 J% `% s' U2 _; f2 f2 ^6 M3 _ - C8 ^ v' U) J% ^ Q
// Then we create a schedule that executes the- ^" w4 g/ ]3 M/ q( ^/ }- `
// modelActions. modelActions is an ActionGroup, by itself it
) [4 K- T) }4 ~* w1 V$ c // has no notion of time. In order to have it executed in
0 [! f! c# K: \; M# ~ // time, we create a Schedule that says to use the
/ Y2 H) ]3 k: o& G6 k9 F [8 D // modelActions ActionGroup at particular times. This, f; ~" G! F" T$ U9 Q; T
// schedule has a repeat interval of 1, it will loop every4 o5 [- ^8 a1 u5 l/ t4 \
// time step. The action is executed at time 0 relative to
0 d4 M s" f+ | // the beginning of the loop.# J( p8 _' }8 E% f( S
2 w: c: u1 A# S% c7 o5 h // This is a simple schedule, with only one action that is
0 V5 Z) m2 }( w* A( L- ? // just repeated every time. See jmousetrap for more/ G+ Q f4 q9 {
// complicated schedules. ~( a# L# B: Y
( X. y- r; H; f- K2 x4 n modelSchedule = new ScheduleImpl (getZone (), 1);# h% W& Y6 P' y
modelSchedule.at$createAction (0, modelActions);+ R3 j; ?) c6 l+ t9 ?" J0 _! f# h
( L5 O' Z# Y; f) o1 P b( A return this;
2 o) _/ V4 ~3 i/ P' R) D; u } |