鉴于以下代码(从attoparsec库复制),内联编译指示有什么作用?我认为只有fmapR内联才有意义,而不是fmap其他Functor实例中定义的其他内容.
instance Functor (IResult t) where
fmap = fmapR
{-# INLINE fmap #-}
Run Code Online (Sandbox Code Playgroud) 这是一个我可以写下来的数据结构,它被Rust编译器接受:
pub struct Pair<S, T>(S, T);
pub enum List<T> {
Nil,
Cons(T, Box<List<Pair<i32, T>>>),
}
Run Code Online (Sandbox Code Playgroud)
但是,我不能写
let x: List<i32> = List::Nil;
Run Code Online (Sandbox Code Playgroud)
因为Rust会抱怨"添加drop-check规则时出现溢出".为什么不可能实例化List::Nil?
应该注意以下工作:
pub struct Pair<S, T>(S, T);
pub enum List<T> {
Nil,
Cons(T, Box<List<T>>),
}
fn main() {
let x: List<i32> = List::Nil;
}
Run Code Online (Sandbox Code Playgroud)
在玩了一下haskell之后我偶然发现了这个功能:
Prelude Data.Maclaurin> :t ((+) . ($) . (+))
((+) . ($) . (+)) :: (Num a) => a -> (a -> a) -> a -> a
Run Code Online (Sandbox Code Playgroud)
(Data.Maclaurin由包向量空间导出.)因此它需要一个Num,一个函数,另一个Num并最终返回一个Num.以下工作有什么神奇之处?
Prelude Data.Maclaurin> ((+) . ($) . (+)) 1 2 3
6
Run Code Online (Sandbox Code Playgroud)
2显然不是一个函数(a-> a)或者我错过了什么?
我试图派生serde::Deserialize一个包含对的引用的结构Path。这产生了一条错误消息,如果您将其替换&'a Path为,则不会发生&'a str。是什么引起了不同的行为#[derive(Deserialize)]?
#!/bin/cargo script
//! ```cargo
//! [dependencies]
//! serde_derive="1.0"
//! serde="1.0"
//! ```
extern crate serde_derive;
use serde_derive::*;
#[derive(Deserialize)]
struct A<'a> {
a: &'a std::path::Path,
//a: &'a str,
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'de` due to conflicting requirements
--> src/main.rs:7:5
|
7 | a: &'a std::path::Path,
| ^
|
note: first, the lifetime cannot outlive the lifetime 'de as …Run Code Online (Sandbox Code Playgroud)