首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带条件的Chapel迭代器

带条件的Chapel迭代器
EN

Stack Overflow用户
提问于 2017-12-15 06:40:49
回答 1查看 71关注 0票数 1

我正试着在Chapel中写一个带条件的迭代器。这是可行的

代码语言:javascript
复制
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);
}

返回

代码语言:javascript
复制
y -> 2
y -> 8
y -> 10
y -> 4
y -> 12
y -> 6

假设我只想返回大于3的值,这些值都不能编译。正确的语法是什么?

var x= 1,4,5,2,6,3;

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-15 06:54:17

错误在于,您检查的是迭代器参数x,而不是条件中的当前元素y。尝试:

代码语言:javascript
复制
iter dx(x) {
  for y in x {
    if y > 3 {
      yield 2*y; 
    }
  }
}

或者用更简洁的形式:

代码语言:javascript
复制
iter dx(x) {
  for y in x do if y > 3 then yield 2*y; 
}

请注意,当if语句的主体是单个语句时,您可以使用then关键字来引入主体,而不是将其括在花括号{ }中。与C不同,then关键字是必需的(因为否则会出现语法歧义)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47823225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档