HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ B, S2 ]7 z6 \. F6 Q; K) m' i; x0 g3 I- T" R
public Object buildActions () {; P" e* ~, G% S+ D
super.buildActions();
v9 w7 a& ]8 y/ Q6 Q% O8 I) U0 ^+ H
1 D- ~. j. O% ? // Create the list of simulation actions. We put these in+ K8 C- C# n6 z/ ], O) r: e4 W% {
// an action group, because we want these actions to be
! b& I. d) v) h/ I/ d // executed in a specific order, but these steps should
& p* D6 P, c% Z/ p% N" z9 b# Y% Y$ U // take no (simulated) time. The M(foo) means "The message/ ^3 w) J3 ~$ c! {
// called <foo>". You can send a message To a particular
9 E) J# ^1 n( t8 b; J; _ // object, or ForEach object in a collection.- ]8 b( @) M1 p* x/ S. U( B
% X2 Z& {% W& e/ G // Note we update the heatspace in two phases: first run
0 B, d# c& g" t // diffusion, then run "updateWorld" to actually enact the
8 \0 q0 V4 N3 p/ W+ w // changes the heatbugs have made. The ordering here is" I5 ^- ^- N$ J0 B# r6 Q" }
// significant!: I( |1 \% _5 p4 k. O
# \* n9 q2 z- Y% ]
// Note also, that with the additional
l5 j3 W) t9 M // `randomizeHeatbugUpdateOrder' Boolean flag we can4 ^0 C( s! e8 t. O
// randomize the order in which the bugs actually run$ S8 ^, t0 r( |
// their step rule. This has the effect of removing any
7 V7 I& \* H4 K9 Z // systematic bias in the iteration throught the heatbug& U$ o. {* D+ y$ w' {0 o
// list from timestep to timestep
4 X' q9 X5 U5 T1 ~# _* u' g 0 d" N5 b U L2 V
// By default, all `createActionForEach' modelActions have
1 S2 d' g( T: ?' ?5 ]4 p* Q // a default order of `Sequential', which means that the
. l/ l. w5 L/ k6 W // order of iteration through the `heatbugList' will be
Z8 U% ?3 y, d0 v0 }$ q; R5 V9 V6 ~ // identical (assuming the list order is not changed9 L+ w# U0 [; d! I! h
// indirectly by some other process).
& h6 P) z( G. C- @& \8 Z ( n9 Q4 N% Y* l! ^6 C
modelActions = new ActionGroupImpl (getZone ());1 n2 f2 k" O& n6 s% ~. d* ^
5 U6 Q3 ?* L6 ^% A2 q0 ]0 f try {# d7 \" Q2 q& C$ _! V
modelActions.createActionTo$message
+ o0 V* Y8 [; e! ?( T( r) \- ~ (heat, new Selector (heat.getClass (), "stepRule", false));- }- ~2 j! v; v$ Y) s) W. Z; G4 h
} catch (Exception e) {
0 [% b6 D: v9 _8 a' r6 l" j9 M System.err.println ("Exception stepRule: " + e.getMessage ());8 f4 U$ {$ U B- E* H* W6 T
}
& ?# N; z* @# K% o6 r3 \5 E
4 O% c" D; `4 Z; U" l1 a, |* V2 ]% [ try {
! g& n+ l7 g; |9 {/ w, z Heatbug proto = (Heatbug) heatbugList.get (0);( T9 `$ y& @# K9 m' ^- J
Selector sel =
0 h) G1 _& C; p+ V3 T: i* t new Selector (proto.getClass (), "heatbugStep", false);# d! o8 w+ K- L9 c$ `: s: K
actionForEach =! q. m1 m4 e& [/ r1 m
modelActions.createFActionForEachHomogeneous$call
* A. b) U7 h7 \ (heatbugList,8 C, R7 O* `- ~ I" x: ?
new FCallImpl (this, proto, sel," l) ^/ q! ` W) y; i
new FArgumentsImpl (this, sel)));; l; J" N# Y4 \) U w# A# l- n
} catch (Exception e) {
) E: F; p4 H) u+ ]" i3 I e.printStackTrace (System.err);
- Y( U0 J' t8 o- B# i }7 t( r) j% M0 ^7 i2 v( I z
' G- v7 t% l$ o; ?" ?6 O syncUpdateOrder ();: h6 k: O# g+ i% q
% r3 Y9 d+ L8 _0 b- ]' Z! v/ d
try {" s) Q9 e! l. L$ W5 ^
modelActions.createActionTo$message 9 g6 V% V5 D% j' E* @
(heat, new Selector (heat.getClass (), "updateLattice", false));& ~. ]; C5 S8 p' b# u' }5 L2 ]
} catch (Exception e) {, b" q5 y* Y4 P' X+ {) i
System.err.println("Exception updateLattice: " + e.getMessage ());
3 ^3 m# x8 V! l: m# z0 i) w }
$ V+ o; H8 y3 j9 N
/ @& M6 \6 Q$ N4 B/ J; b& y( l // Then we create a schedule that executes the
5 ?( N: v* C3 r // modelActions. modelActions is an ActionGroup, by itself it
M$ k3 O" j6 ^2 s+ o1 V // has no notion of time. In order to have it executed in( G( ]+ {/ }, T/ H
// time, we create a Schedule that says to use the
$ T/ \" @+ ?+ X5 }" Y0 k // modelActions ActionGroup at particular times. This( J ~& m* s4 }7 C
// schedule has a repeat interval of 1, it will loop every7 k2 w- U9 I$ `7 \+ h# ]* v
// time step. The action is executed at time 0 relative to
4 N3 l( Q/ E! a# J // the beginning of the loop.
& P Y/ H, Y; x$ t- U2 L
2 F' i5 C% n' }2 M! n" B // This is a simple schedule, with only one action that is
. n2 Q! U7 v& ^6 H( x1 X // just repeated every time. See jmousetrap for more
6 d! H" `4 U: z; g+ ~ // complicated schedules.
% N0 Z- ?3 v: g: p$ ]8 p+ D$ j6 f
2 x+ N/ X$ M- t; i0 P( O modelSchedule = new ScheduleImpl (getZone (), 1);
$ m8 r7 M! f0 V modelSchedule.at$createAction (0, modelActions);6 D, W0 @. l2 k# U! h, j) i0 R- i! P
9 {: v& B: _. ? C7 {* ?0 M
return this;8 d5 f, u2 g5 d: X& h
} |