HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: V' u9 s( f; y# s! v% q
# {" ?/ }1 o9 ^4 w) S: W
public Object buildActions () {/ r) `; ]: D, v3 W- M
super.buildActions();
! l/ r# M6 F' q; T( c) U/ F
# x% i8 b- R4 ?, `- e. Z5 Y // Create the list of simulation actions. We put these in2 C# C" ?* }, j
// an action group, because we want these actions to be
1 ?6 g+ ]4 w( m9 L6 D // executed in a specific order, but these steps should3 r; e) Q& o( ~- C8 W1 G
// take no (simulated) time. The M(foo) means "The message) C9 O* ?. A0 l
// called <foo>". You can send a message To a particular( H4 B) Y* k/ z
// object, or ForEach object in a collection.8 R; l% o# m) V! J. t- ^+ q- W/ h
* K* g8 [' r0 {1 m
// Note we update the heatspace in two phases: first run5 v- Q3 e( F! u5 o- @
// diffusion, then run "updateWorld" to actually enact the
" n2 d4 `/ Z4 a) p# U* v5 F // changes the heatbugs have made. The ordering here is
# L6 }/ b8 q4 y // significant!
; X) E& g+ x u3 }9 P
0 u, c I, o# I' T# O. g$ s$ p! a // Note also, that with the additional
) c; z Y( c0 b3 |1 d0 O, L! s // `randomizeHeatbugUpdateOrder' Boolean flag we can4 U/ G& e9 _1 F6 R
// randomize the order in which the bugs actually run
( d9 P |, m" `" r% P* A# f/ H // their step rule. This has the effect of removing any1 }, h, F& [9 P
// systematic bias in the iteration throught the heatbug
7 W+ `. H& I+ g7 b: ]' T // list from timestep to timestep+ a. K4 h F+ E8 R4 W/ K4 f: G
( b9 s9 j+ K& ]. a) S( [
// By default, all `createActionForEach' modelActions have
/ u* L& M. p7 l/ V j9 S$ t // a default order of `Sequential', which means that the* y" k& D+ G. C* y+ Z% w3 S
// order of iteration through the `heatbugList' will be
, Y1 F$ m4 M# R! L // identical (assuming the list order is not changed3 f$ O8 S W; K7 U) g
// indirectly by some other process).- x( m2 B# A( i- H6 O9 D; v
1 n* A" d% Y* [ modelActions = new ActionGroupImpl (getZone ());
% t6 v m2 l9 t2 ^4 S( f' T" [( @0 l$ t
try {
% j% y5 f0 F. C c. y# b0 _ modelActions.createActionTo$message
) q/ u+ d# T. w4 b4 C (heat, new Selector (heat.getClass (), "stepRule", false));
8 a% X5 V2 i4 p) A } catch (Exception e) {
' `% x7 l' ~% @ Q, m System.err.println ("Exception stepRule: " + e.getMessage ());! K3 A% t( w! }* p8 b
}
& _+ K% q5 m' [, g, W9 R+ S7 L! E7 C+ U0 ~ Q% j; a
try {
+ j0 u* D. ^2 c& z Heatbug proto = (Heatbug) heatbugList.get (0);0 O, |0 E! D6 y5 q. n; W' |
Selector sel = 5 g y$ N1 `2 j i: c8 J" b$ `) Z
new Selector (proto.getClass (), "heatbugStep", false);
5 `. v: \1 ?# S+ H0 `. w actionForEach =2 v7 V$ S0 y* P$ @ K, s9 S2 F
modelActions.createFActionForEachHomogeneous$call
( q( N, _- \" t! ]' H o K! O (heatbugList,8 U" F% `3 D: _8 K& m1 y: u
new FCallImpl (this, proto, sel,5 M4 z. p2 K1 _# w! v1 [/ ^
new FArgumentsImpl (this, sel)));
& k7 ?: _9 Q* K; r: @0 v" h } catch (Exception e) {- [# z$ Z0 U+ h: _. X
e.printStackTrace (System.err);; s: z: P9 F$ }; V O
}
6 x2 n1 I) V. z* e- x; D
j# H! r8 g. z; m0 s syncUpdateOrder ();
/ L6 V7 _! Z, L$ i
* j: h' u+ O4 G try {
+ O. D T% N( h M& _8 y( s% R modelActions.createActionTo$message 2 {# W" G5 ]! F! q! U, Q$ M
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ K5 e! N: f8 X# k, f1 a+ _ } catch (Exception e) {
7 a! B# K5 W0 v" B' J4 @ System.err.println("Exception updateLattice: " + e.getMessage ());
9 |; s% d; F5 \) J) y1 i }$ j$ _% C& w& [+ {& t) U
! M0 j# k8 p8 P& P# O% e7 H
// Then we create a schedule that executes the9 a, r; b) O: b2 n) ?4 ]: A" L1 k
// modelActions. modelActions is an ActionGroup, by itself it) e( p( a9 x' R2 F p6 Q1 B X0 W
// has no notion of time. In order to have it executed in
& e! l/ X6 m- H# c+ z% Z // time, we create a Schedule that says to use the
U D; c, O& E8 U // modelActions ActionGroup at particular times. This+ C# k8 R5 f- W6 Q) T5 ^; W
// schedule has a repeat interval of 1, it will loop every
: z: \- Q: ~8 s0 h* G* ^ // time step. The action is executed at time 0 relative to9 d' V9 j! k0 m* ]
// the beginning of the loop.: p8 ]8 f9 h1 b- G
" J4 V% Z( w6 r. g. @. W
// This is a simple schedule, with only one action that is
6 N3 C: z; T8 ~# z+ f2 O // just repeated every time. See jmousetrap for more( D- C, w* i* ^5 W, Y
// complicated schedules.; K& B. f( H' B' F% t: l! W
" f! e/ ~/ A* Z( ]3 F* Y modelSchedule = new ScheduleImpl (getZone (), 1);
! A+ W8 K4 V/ Z* x, F. v/ O- k& M modelSchedule.at$createAction (0, modelActions);
9 f4 K, R- l0 A( g. C7 O0 H, U
% t$ U1 }+ U) [$ `! C1 R return this;
% m. ]: W. U9 F9 `- T. s' \ } |