Différence entre les boucles FOR et FOR EACHQuelqu'un peut-il expliquer pourquoi ceci:
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
y expr = Expr( Y() );
For( c = 1, c <= N Items( col ), c++,
Insert Into( y expr, col[c] );
);
Name Expr(y expr);produit la sortie attendue
Y( :Runtime, :RunPulse, :RstPulse )
mais ça:
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
y expr = Expr( Y() );
For each({coll, index},col,
Insert Into( y expr, coll );
);
Name Expr(y expr);produit ceci :
Y( ., ., . )
Je m'attendrais à ce qu'il donne le même résultat? Comment dois-je changer la boucle FOR EACH pour donner le même résultat?
ScriptRe : Différence entre les boucles FOR et FOR EACHJe suppose que les colonnes sont évaluées en valeurs de lignes actuelles dans For Each (vous pouvez tester cela en ajoutant Row() = 1; par exemple). Vous pourrez peut-être éviter cela en utilisant Name Expr()
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Fitness.jmp");
col = {:Runtime, :RunPulse, :RstPulse};
y expr = Expr(Y());
For(c = 1, c <= N Items(col), c++,
Insert Into(y expr, col[c]);
);
Show(Name Expr(y expr));
Row() = 1;
y expr = Expr(Y());
For Each({coll, index}, col,
Insert Into(y expr, coll);
);
Show(Name Expr(y expr));
y expr = Expr(Y());
For Each({coll, index}, col,
Insert Into(y expr, Name Expr(coll));
);
Show(Name Expr(y expr));Re : Différence entre les boucles FOR et FOR EACHOui, c'est ça.
C'est un comportement étrange, puisque 1. nous avons l'instruction For Each Row pour l'évaluation par ligne, et 2. For Each devrait traiter une liste (et j'essaie de travailler avec une liste de références aux colonnes) de la même manière que la boucle For.
Est-ce un bug ou est-ce un comportement intentionnel ?