我发誓曾经有一件T恤出售,上面写着不朽的话:
什么部分

你不明白吗?
就我而言,答案就是......全部!
特别是,我经常在Haskell论文中看到这样的符号,但我不知道它的含义是什么.我不知道它应该是什么样的数学分支.
我当然认识到希腊字母的字母,以及诸如"∉"之类的符号(通常意味着某些东西不是一组的元素).
另一方面,我以前从未见过"⊢"(维基百科称它可能意味着"分区").我也不熟悉这里使用的vinculum.(通常它表示一个级分,但是这并不出现在这里是这种情况.)
如果有人至少可以告诉我从哪里开始想要理解这个符号海洋的含义,那将会有所帮助.
haskell functional-programming lambda-calculus hindley-milner denotational-semantics
此代码编译:
#[derive(Debug, Default)]
struct Example;
impl Example {
fn some_method(&self) {}
}
fn reproduction() -> Example {
let example = Default::default();
// example.some_method();
example
}
Run Code Online (Sandbox Code Playgroud)
如果添加了注释行,则会导致错误:
#[derive(Debug, Default)]
struct Example;
impl Example {
fn some_method(&self) {}
}
fn reproduction() -> Example {
let example = Default::default();
// example.some_method();
example
}
Run Code Online (Sandbox Code Playgroud)
为什么添加此方法调用会导致类型推断失败?
我看过以下两个问题:
从他们那里,我知道Rust使用的是Hindley-Milner 的(修改的)版本。后一个问题的答案将Rust的类型推论描述为一个方程系统。另一个答案明确指出“ Rust中的类型信息可以倒流”。
使用适用于这种情况的知识,我们可以:
example 是类型 ?E?E 必须有一个称为 some_method?E 返回Example向后工作,很容易使人看到?E …
我可以得到这样的枚举的整数值:
enum MyEnum {
A = 1,
B,
C,
}
let x = MyEnum::C as i32;
Run Code Online (Sandbox Code Playgroud)
但我似乎无法做到这一点:
match x {
MyEnum::A => {}
MyEnum::B => {}
MyEnum::C => {}
_ => {}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能匹配枚举值或尝试转换x回MyEnum?
我可以看到这样的函数对枚举很有用,但它可能不存在:
impl MyEnum {
fn from<T>(val: &T) -> Option<MyEnum>;
}
Run Code Online (Sandbox Code Playgroud) 为什么这个工作正常:
let items = [1, 2, 3];
let mut cumulator = 0;
for next in items.iter() {
cumulator += next;
}
println!("Final {}", cumulator);
Run Code Online (Sandbox Code Playgroud)
但这失败了?:
let items = [1, 2, 3];
let mut cumulator = 0;
for next in items.iter() {
cumulator += next.pow(2);
}
println!("Final {}", cumulator);
Run Code Online (Sandbox Code Playgroud)
错误.pow(2):
no method named `pow` found for reference `&{integer}` in the current scope
method not found in `&{integer}`rustc (E0599)
Run Code Online (Sandbox Code Playgroud)
我的 IDE 标识next为 i32,第一个代码示例工作正常。next.pow()但是当我引用或 上的任何函数时,编译器就会出现问题next。编译器抱怨这 …