< 返回版块

Snowmanzzz 发表于 2023-02-26 17:01

                match NEIGBOURHOOD_OFFSETS.iter()
                    .map(|&(ox, oy)| (x + ox, y + oy))
                    .filter(|&(x, y)| (0 <= x && x < width) && (0 <= y && y < height))
                    .filter(|&(x, y)| field[y as usize].as_bytes()[x as usize] == b'*')
                    .count() {
                        0 => ' ',
                        n => (n as u8 + '0' as u8) as char
                    }

NEIGBOURHOOD_OFFSETS是个array

static NEIGBOURHOOD_OFFSETS: &'static [(i32, i32)] = &[
    (-1, -1), (0, -1), (1, -1),
    (-1,  0),          (1,  0),
    (-1,  1), (0,  1), (1,  1),
];

是个有关扫雷的题目~

评论区

写评论
作者 Snowmanzzz 2023-02-27 15:55

让对象数据不离开所有权空间

不然rust一assign就容易导致所有权变更 最后有人万一用了前面的容易着火是吧

--
👇
是也乎: 是也乎,( ̄▽ ̄)

这就是 Rust 中最舒服的链式调用支持吧, 可以在任何允许的地方通过 . 链接一系列操作, 就地完成数据的处理, 然后进入下一个语法块, 本质上就是让对象数据不离开所有权空间, 尽可能完成一堆常见处理...

不过, 在 Rust 标准库支持下这个常见几乎能完成 80% 场景中的核心操作了...

如果任性的话, 一个应用系统可以就这么一个链式操作堆完成所有任务了.

--
👇
overheat: 我感觉这里关键的概念是:表达式和语句的区别吧?

那一大坨的类函数式编程的code,最后就是一个表达式expression,有个返回值。这样看起来就是简单的match用法了

作者 Snowmanzzz 2023-02-27 15:54

statement expression?

--
👇
overheat: 我感觉这里关键的概念是:表达式和语句的区别吧?

那一大坨的类函数式编程的code,最后就是一个表达式expression,有个返回值。这样看起来就是简单的match用法了

是也乎 2023-02-27 14:34

是也乎,( ̄▽ ̄)

这就是 Rust 中最舒服的链式调用支持吧, 可以在任何允许的地方通过 . 链接一系列操作, 就地完成数据的处理, 然后进入下一个语法块, 本质上就是让对象数据不离开所有权空间, 尽可能完成一堆常见处理...

不过, 在 Rust 标准库支持下这个常见几乎能完成 80% 场景中的核心操作了...

如果任性的话, 一个应用系统可以就这么一个链式操作堆完成所有任务了.

--
👇
overheat: 我感觉这里关键的概念是:表达式和语句的区别吧?

那一大坨的类函数式编程的code,最后就是一个表达式expression,有个返回值。这样看起来就是简单的match用法了

overheat 2023-02-27 09:05

我感觉这里关键的概念是:表达式和语句的区别吧?

那一大坨的类函数式编程的code,最后就是一个表达式expression,有个返回值。这样看起来就是简单的match用法了

作者 Snowmanzzz 2023-02-26 21:51

我晕 太傻了。。。 等于是对count进行match 前面一堆调用在铺垫哈

谢谢啦 这论坛还没消息系统 你还能看到~

--
👇
Pikachu: 为什么会有这种感觉呢?这里match确实是用来匹配的啊。它基本等价于

let x = NEIGBOURHOOD_OFFSETS.iter()
    .map(|&(ox, oy)| (x + ox, y + oy))
    .filter(|&(x, y)| (0 <= x && x < width) && (0 <= y && y < height))
    .filter(|&(x, y)| field[y as usize].as_bytes()[x as usize] == b'*')
    .count();

match x {
        0 => ' ',
        n => (n as u8 + '0' as u8) as char
}

--
👇
Snowmanzzz: 谢谢皮卡丘,我理解中match只是用来匹配的,而这种用法看着不是啊

Pikachu 2023-02-26 19:28

为什么会有这种感觉呢?这里match确实是用来匹配的啊。它基本等价于

let x = NEIGBOURHOOD_OFFSETS.iter()
    .map(|&(ox, oy)| (x + ox, y + oy))
    .filter(|&(x, y)| (0 <= x && x < width) && (0 <= y && y < height))
    .filter(|&(x, y)| field[y as usize].as_bytes()[x as usize] == b'*')
    .count();

match x {
        0 => ' ',
        n => (n as u8 + '0' as u8) as char
}

--
👇
Snowmanzzz: 谢谢皮卡丘,我理解中match只是用来匹配的,而这种用法看着不是啊

作者 Snowmanzzz 2023-02-26 19:24

谢谢皮卡丘,我理解中match只是用来匹配的,而这种用法看着不是啊

--
👇
Pikachu: 能把你的问题再描述清楚一点吗?这段代码有什么不清楚的?

Pikachu 2023-02-26 18:54

能把你的问题再描述清楚一点吗?这段代码有什么不清楚的?

1 共 8 条评论, 1 页