< 返回版块

Neutron3529 发表于 2020-06-29 01:04

这是我目前的实现方法

fn find(i:i32){i==42}
fn main()->i32{
  let mut ans=101;
  for i in 0..=100{
    if find(i){ans=i;break;}
  }
  ans
}

我比较好奇,有没有更简短的写法,或者类似的写法是否属于ZCA

我尝试将循环变量i改成ans,结果是ans并不能收到break时候的位置信息

总觉得这种问题用C会很简单,但用rust会罗嗦很多

int ans;
for(ans=0;ans<=100;ans++)if(find(ans))break;
return ans;

有点好奇Rust有没有更简单的写法

评论区

写评论
作者 Neutron3529 2020-06-29 21:48

。。。

脑子锈了

就会用for了……

--
👇
lagudomeze: 可以不用for语句吧

用while也可以吧?

--
👇
Neutron3529: 我主要是觉得,循环变量需要多占32bit有点难受

--
👇
whfuyn: 哈?如果ZCA指的是零代价抽象的话,我怎么感觉这里扯不上关系 + 扣性能也不是在这里扣吧 + 这里多半能被优化掉。


fn check(i: &i32) -> bool { *i == 42 }

fn f() -> Option<i32> {
    (0..=100).find(check)
}

lagudomeze 2020-06-29 14:55

可以不用for语句吧

用while也可以吧?

--
👇
Neutron3529: 我主要是觉得,循环变量需要多占32bit有点难受

--
👇
whfuyn: 哈?如果ZCA指的是零代价抽象的话,我怎么感觉这里扯不上关系 + 扣性能也不是在这里扣吧 + 这里多半能被优化掉。


fn check(i: &i32) -> bool { *i == 42 }

fn f() -> Option<i32> {
    (0..=100).find(check)
}

作者 Neutron3529 2020-06-29 13:24

我主要是觉得,循环变量需要多占32bit有点难受

--
👇
whfuyn: 哈?如果ZCA指的是零代价抽象的话,我怎么感觉这里扯不上关系 + 扣性能也不是在这里扣吧 + 这里多半能被优化掉。


fn check(i: &i32) -> bool { *i == 42 }

fn f() -> Option<i32> {
    (0..=100).find(check)
}

whfuyn 2020-06-29 02:59

哈?如果ZCA指的是零代价抽象的话,我怎么感觉这里扯不上关系 + 扣性能也不是在这里扣吧 + 这里多半能被优化掉。


fn check(i: &i32) -> bool { *i == 42 }

fn f() -> Option<i32> {
    (0..=100).find(check)
}

1 共 4 条评论, 1 页