我有这个密码:
pub trait MiddlewareHandler: Clone + Send {
//...probably unimportant for the question
}
#[deriving(Clone)]
pub struct Middleware {
handlers: Vec<Box<MiddlewareHandler>>
}
#[deriving(Clone)]
pub struct Server{
middleware: Middleware
}
这给我留下了编译器对我大喊大叫:
src/server.rs:20:31: 20:37 error: the type `server::Server', which does not fulfill `Send`, cannot implement this trait
src/server.rs:20 impl http::server::Server for Server {
^~~~~~
src/server.rs:20:31: 20:37 note: types implementing this trait must fulfill `Send+Sized`
src/server.rs:20 impl http::server::Server for Server {
我花了很长时间才明白我必须改变Vec
pub trait MiddlewareHandler: Clone + Send {
//...probably unimportant for the question
}
#[deriving(Clone)]
pub struct Middleware {
handlers: Vec<Box<MiddlewareHandler + Send>>
}
#[deriving(Clone)]
pub struct Server{
middleware: Middleware
}
代码现在编译,但我完全不明白这里到底有什么问题。为什么要在Vec定义中发送代码?我的意思是,这个特性已经实现了发送克隆。对我来说,这看起来相当多余。
有人能和我分享他的智慧吗,为什么我必须这样修改代码?
看起来像个虫子,我提交了15155号文件。
“问题”是http::server::server
上的Send
限制。定义是
pub trait Server: Send + Clone {
这意味着实现者需要同时是Clone
(这是满足的,因为您已经通过#[派生(克隆)]
实现了Clone
)和发送
。编译器自动实现的发送
的类型的内容满足发送
(这个细节将改变与选择内置特性:他们将需要显式实现太),不幸的是,原始类型是类似
pub struct Middleware {
handlers: Vec<Box<Trait>>
}
通常不实现Send
:编译器无法知道框中已擦除的类型
编译器需要知道更多信息,也就是说,它需要保证内部类型是
Send
,这可以通过向trait对象:框添加更多边界来提供
然而,在本例中,
MiddlewareHandler
trait已经将这个Send
绑定为一个超级trait(这意味着trait对象的内容必须满足Send
),因此编译器没有计算出这个框是很奇怪的
在方法或类范围内,下面的行编译(带有警告): 在类作用域中,变量获取其默认值,以下给出未定义引用错误: 这难道不是第一个应该以相同的未定义引用错误结束吗?或者第二行应该编译?或者我错过了什么?
我无法理解以下科特林文档: 为什么编译器在这里需要显式初始值设定项的唯一解释(至少我能想到的唯一解释)是 Kotlin 没有属性的默认值。对吗?如果是,为什么?换句话说:Kotlin 属性和 Java 字段(具有默认值)之间有什么区别,这不允许我们有属性的默认值?
说明: 这实际上是一个诡计问题,因为这段代码不会编译!正如您在第1章中所记得的,浮点文字被假定为双倍,除非后缀有一个f,如2.1f。如果正确地将该值设置为2.1F,那么升级将与上一个示例类似,两个操作数都升级为double,结果将是一个double值。 但我不明白。如果浮动y=2.1;假设是双倍,则不需要将变量y提升到双倍。而我更困惑的是下一个问题,那就是:
奇怪的是,标记为“OK”的行编译得很好,但标记为“Error”的行失败了。它们看起来基本上是一样的。
本文向大家介绍什么是预编译,何时需要预编译:相关面试题,主要包含被问及什么是预编译,何时需要预编译:时的应答技巧和注意事项,需要的朋友参考一下 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
问题内容: 这段代码使我凝视了几分钟: 我以前从未见过,而且我也不知道Java有一个“ loop”关键字(NetBeans甚至没有像关键字一样给它上色),并且它在JDK 6中可以很好地编译。 有什么解释? 问题答案: 这不是一个。 用法: