小编bas*_*gnr的帖子

如何确保类型安全?

只是浏览Rust指南(猜谜游戏),这段代码对我来说似乎不对:

let num = match input_num {
    Some(num) => num,
    None      => {
        println!("Please input a number!");
        continue;
    }
};
Run Code Online (Sandbox Code Playgroud)

num在这种情况下,如何键入推断工作?第一个匹配案例显然返回一个数字,而第二个匹配案例只是println&continue语句,它不会返回任何内容(或返回()).编译器如何假设它的类型安全?

rust

5
推荐指数
2
解决办法
762
查看次数

有什么方法可以显式地编写闭包的类型?

我开始阅读有关封闭的Rust指南。从指南:

这是因为在Rust中,每个闭包都有其自己的唯一类型。因此,不仅具有不同签名的闭包具有不同的类型,而且具有相同签名的不同闭包也具有不同的类型。

有没有一种方法可以显式地编写闭包的类型签名?是否有任何编译器标志可扩展推断的闭合类型?

closures rust

4
推荐指数
1
解决办法
66
查看次数

实现咖喱功能

我目前正在阅读Graham Hutton撰写的“在haskell中编程”,并且刚刚接触到curring和函数组合。在练习部分中,有一个从头开始实现curry函数的任务,该任务已存在于前奏模块中。

这是我的实现,但是不起作用。有人可以解释一下(我是函数编程的新手)为什么它不起作用

my_curry :: ((a ,b) -> c) -> (a -> b -> c)
my_curry origFunc = origFunc.combine
                    where
                         combine e f = (e, f)
Run Code Online (Sandbox Code Playgroud)

这是错误[已添加]

[1 of 1] Compiling Main             ( higher_order.hs, interpreted )

  higher_order.hs:92:30:
      Couldn't match type `t0 -> (a, t0)' with `(a, b)'
      Expected type: a -> (a, b)
        Actual type: a -> t0 -> (a, t0)
      In the second argument of `(.)', namely `combine'
      In the expression: origFunc . combine
      In an equation for `my_curry': …
Run Code Online (Sandbox Code Playgroud)

haskell currying composition

2
推荐指数
2
解决办法
1724
查看次数

为什么在全局范围内声明的枚举明确要求不使用终止分号?

如果我们;在全局范围内的枚举声明的末尾显式添加,编译器会抱怨.

#[derive(Debug)]
enum Organs{
    Head,
    Tail,
};

fn main(){
    println!("{:?}", Organs::Head);
}
Run Code Online (Sandbox Code Playgroud)

生成的错误消息是

enums.rs:5:2: 5:3 error: expected item, found `;`
enums.rs:5 };
Run Code Online (Sandbox Code Playgroud)

但是,当在函数内声明时,语句终止符不是必需的,程序将在有或没有编译的情况下编译;.

fn main(){
    #[derive(Debug)]
    enum Organs{
        Head,
        Tail,
    };
    println!("{:?}", Organs::Head);
}
Run Code Online (Sandbox Code Playgroud)

我浪费了很多时间(刚才)确定编译器在抱怨什么.我没有想到枚举声明(在全局范围内)不能终止;.为什么会出现这种不一致(或者我误解了什么)?

rust

2
推荐指数
1
解决办法
202
查看次数

标签 统计

rust ×3

closures ×1

composition ×1

currying ×1

haskell ×1