我正试着在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);
}返回
y -> 2
y -> 8
y -> 10
y -> 4
y -> 12
y -> 6假设我只想返回大于3的值,这些值都不能编译。正确的语法是什么?
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);
}发布于 2017-12-15 06:54:17
错误在于,您检查的是迭代器参数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关键字是必需的(因为否则会出现语法歧义)。
https://stackoverflow.com/questions/47823225
复制相似问题