带条件的小教堂迭代器
Chapel iterators with conditionals
我正在尝试在 Chapel 中编写一个带有条件的迭代器。这有效
var x = [1,4,5,2,6,3];
iter dx(x) {
for y in x do yield 2*y;
}
for y in dx(x) {
writeln("y -> ", y);
}
returning
y -> 2
y -> 8
y -> 10
y -> 4
y -> 12
y -> 6
假设我只想 return 大于 3 的那些。其中 None 个将编译。正确的语法是什么?
var x = [1,4,5,2,6,3];
iter dx(x) {
//for y in x do {if x > 3} yield 2*y; // Barf
//for y in x do {if x > 3 yield 2*y }; // Barf
//for y in x do if x > 3 yield 2*y ; // Barf
}
for y in dx(x) {
writeln("y -> ", y);
}
错误是您正在检查迭代器参数 x
而不是条件中的当前元素 y
。尝试:
iter dx(x) {
for y in x {
if y > 3 {
yield 2*y;
}
}
}
或更简洁的形式:
iter dx(x) {
for y in x do if y > 3 then yield 2*y;
}
请注意,当 if
语句的主体是单个语句时,您可以使用 then
关键字来介绍主体而不是将其括在大括号 { }
中。与 C 不同,then
关键字是必需的(因为否则会出现句法歧义)。
我正在尝试在 Chapel 中编写一个带有条件的迭代器。这有效
var x = [1,4,5,2,6,3];
iter dx(x) {
for y in x do yield 2*y;
}
for y in dx(x) {
writeln("y -> ", y);
}
returning
y -> 2
y -> 8
y -> 10
y -> 4
y -> 12
y -> 6
假设我只想 return 大于 3 的那些。其中 None 个将编译。正确的语法是什么?
var x = [1,4,5,2,6,3];
iter dx(x) {
//for y in x do {if x > 3} yield 2*y; // Barf
//for y in x do {if x > 3 yield 2*y }; // Barf
//for y in x do if x > 3 yield 2*y ; // Barf
}
for y in dx(x) {
writeln("y -> ", y);
}
错误是您正在检查迭代器参数 x
而不是条件中的当前元素 y
。尝试:
iter dx(x) {
for y in x {
if y > 3 {
yield 2*y;
}
}
}
或更简洁的形式:
iter dx(x) {
for y in x do if y > 3 then yield 2*y;
}
请注意,当 if
语句的主体是单个语句时,您可以使用 then
关键字来介绍主体而不是将其括在大括号 { }
中。与 C 不同,then
关键字是必需的(因为否则会出现句法歧义)。