HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 l" l& I' l8 c' z V8 ?9 F
& r. p0 q5 m h3 |: h public Object buildActions () {$ a, H5 E; h6 r
super.buildActions();0 I9 M* J% [, A. b" `5 P6 y+ J
' Z! H" y0 N1 l1 e
// Create the list of simulation actions. We put these in
7 U6 n- V) R, [: t9 z; b3 B1 j' T // an action group, because we want these actions to be
" S) J9 v- B8 E+ x* N // executed in a specific order, but these steps should( W, M8 k8 Z( e7 `
// take no (simulated) time. The M(foo) means "The message
/ {1 i X: Y h0 O // called <foo>". You can send a message To a particular" M3 h8 Z: _! V* {0 p
// object, or ForEach object in a collection.& Q- l, z+ l2 Y/ f- f7 H+ m5 @
$ |( `! h% x: a7 j
// Note we update the heatspace in two phases: first run
" C) o) p/ |2 w! }/ |1 P4 C0 [" N // diffusion, then run "updateWorld" to actually enact the1 W" E* V) m" T7 X1 _
// changes the heatbugs have made. The ordering here is! ^9 S* B( L m9 i
// significant!: `! l% |1 Q0 G8 N
7 O: \1 a# e/ w# K( ~7 ? // Note also, that with the additional/ n. m# j- m1 V
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 q- b: f6 q6 [
// randomize the order in which the bugs actually run
& t; ~3 Y% f. F* ^' i$ H // their step rule. This has the effect of removing any/ f* D' C7 |$ b* U/ O
// systematic bias in the iteration throught the heatbug- H& ~. F6 i: |
// list from timestep to timestep
* d# T( Z! \7 R9 u* \4 J, L$ Y5 R. |7 h
5 Q' N4 f! U# E0 P0 l) S* Q- v; V // By default, all `createActionForEach' modelActions have
! t& G! L R$ Q# E( ?* H0 @) K // a default order of `Sequential', which means that the
1 a2 Z! O- }3 Y8 ~9 D // order of iteration through the `heatbugList' will be
" \2 J T. ?8 u h // identical (assuming the list order is not changed
/ f7 M$ N; p" z // indirectly by some other process).
; x, b( Y5 q6 L2 T0 P8 C- E9 l G
, O, O8 C) N) I6 j6 L modelActions = new ActionGroupImpl (getZone ());2 W: g2 ?! Y/ N7 ^# T# t4 C$ A
6 S( m# z. \ C1 R4 p% f try {) J3 }* F" ^/ E+ D5 h' p8 R) t
modelActions.createActionTo$message
( a) V9 R/ E g (heat, new Selector (heat.getClass (), "stepRule", false));
! J9 m8 K7 d; P8 T8 | } catch (Exception e) {
: e- b0 f$ X6 R9 I& f& F8 ]( v System.err.println ("Exception stepRule: " + e.getMessage ());
$ ^7 ]8 w5 c. y* n" ~ }5 M" W5 e& B9 f* k) B
8 T+ S4 |* B7 e$ E9 J% z5 J
try {
7 U1 i& J3 L" J/ p Heatbug proto = (Heatbug) heatbugList.get (0);
3 }: V- X# w P( a0 { Selector sel =
: P# { {! J2 K e2 {) Q7 h new Selector (proto.getClass (), "heatbugStep", false);
+ I2 h$ d8 o" b7 `. ^) `+ k$ ~7 [ actionForEach =
- P- z$ r- L) O; v$ y modelActions.createFActionForEachHomogeneous$call
) _$ K4 v! g, M/ W6 w (heatbugList,: f) B$ \7 j2 s. z" j9 I; ?
new FCallImpl (this, proto, sel,8 F: F4 F9 X W* q
new FArgumentsImpl (this, sel)));
, O. W8 ^9 s; D" T8 L- a/ Q } catch (Exception e) {
6 R/ K- L) Q- P% P e e.printStackTrace (System.err);, g j+ Z+ ]5 R7 d4 z6 a* k
}# n/ F' g4 N" _: Z) j8 \
" [ Z! q/ k: N0 t: e- o/ R syncUpdateOrder ();
/ W" i, a* |) o! h- M$ G2 E" U5 J
8 Q6 ]3 o' I# r( U: U try {
0 P2 a5 d( |7 Z8 ^9 M modelActions.createActionTo$message 5 z8 y% r) Y+ F: a {' e3 C
(heat, new Selector (heat.getClass (), "updateLattice", false));
& R8 @/ m: Z! y0 G: } } catch (Exception e) {7 C* ?: a& [% G. v; x# e' j
System.err.println("Exception updateLattice: " + e.getMessage ());0 ^0 x8 s" B R4 H/ C) @! l
}
N1 c2 o& t8 P" B/ R 8 h5 b3 e& B( x* [ n+ u9 H! U" U
// Then we create a schedule that executes the) t, B9 w# v' q
// modelActions. modelActions is an ActionGroup, by itself it7 F2 P( b( |/ b
// has no notion of time. In order to have it executed in
5 J B9 l2 t0 ?* @ // time, we create a Schedule that says to use the
! C# g2 u: k. I& Y! ^0 ^ // modelActions ActionGroup at particular times. This G$ ]( h7 N. ^& @. J" O ^
// schedule has a repeat interval of 1, it will loop every2 f* H( q+ h& j0 r' l: ?
// time step. The action is executed at time 0 relative to
- ]0 D q& ?3 }8 O // the beginning of the loop.
, z1 Y0 I% P3 i7 F5 l% o7 k) s* p/ M* L4 B
// This is a simple schedule, with only one action that is
2 a! P* v+ v2 r1 w$ Z( d% _+ C // just repeated every time. See jmousetrap for more
8 U* q& K {8 k, L3 w; s8 T // complicated schedules." l' K2 z8 s/ O/ i% T9 z
* r' |0 ^: Y, z1 K' @" h B
modelSchedule = new ScheduleImpl (getZone (), 1);% m- N9 S6 b; g- O) L6 P( G1 n* i+ m# M
modelSchedule.at$createAction (0, modelActions);
# v6 Z. v* e, Z
; ~6 r+ q/ C/ m) ^ return this;
3 T' c( q6 `" p* o9 h. R } |