オブジェクトがあります。var Players:[ドメイン] Playerと逆の順序でオブジェクトを繰り返し処理したいと思います。チャペルでドメインによってインデックスされたオブジェクトを反復する方法
のようなものは、この
for p in Players by {
writeln(p.name);
writeln("I was the %i st player added".format(p.pid)") // pid corresponds to domain index.
p.shoeSize = 1.5*p.shoeSize
}
でも動作します!
// poops
for p in Players by -1 {
writeln(p.name);
writeln("I was the %i -to-last player added".format(p.pid)") // pid corresponds to domain index.
p.shoeSize = 1.5*p.shoeSize
}
そして、私は靴のサイズが更新されていることを確認したいと思います。
== UPDATE ==あなたが期待したようにレンジ動作by
は、アレイ上では動作しませんbencrayの要求
class Player {
var name: string,
position: string,
pid: int,
shoeSize: int;
}
var playerDom = {1..0},
players: [playerDom] Player;
writeln("I have %i players".format(playerDom.size));
// Now add some players
// Better way to increase as I go along?
playerDom = {1..playerDom.size+1};
players[playerDom.size] = new Player(name="Gretsky", position="Center", shoeSize=10, pid=playerDom.size);
writeln("I have %i players".format(playerDom.size));
playerDom = {1..playerDom.size+1};
players[playerDom.size] = new Player(name="Blake", position="Defenseman", shoeSize=12, pid=playerDom.size);
writeln("I have %i players".format(playerDom.size));
for p in players {
writeln("Player %i has shoeSize %i".format(p.pid, p.shoeSize));
p.shoeSize += 1;
}
for p in players {
writeln("Player NOW %i has shoeSize %i".format(p.pid, p.shoeSize));
}
// poops during compilation
// domobj.chpl:31: error: the first argument of the 'by' operator is not a range
for p in players by -1 {
writeln("Player NOW %i has shoeSize %i".format(p.pid, p.shoeSize));
}
マインドここでは、例えば、何が起こったのか、あなたは何を期待したのか?コンパイル時の失敗?実行時に障害が発生しましたか?予期しない動作? – bencray
関連性がある場合は、 'Players'宣言と要素型宣言を提供できますか?関連性がない場合、この例を単純化して 'Players'を整数の配列にすると、各要素の値が更新されますか? – bencray