我正在研究一些锻炼的解决方案,但不明白为什么需要明确的终身声明?
#[derive(Debug)]
pub struct HighScores<'a> {
scores: &'a [u32],
}
impl<'a> HighScores<'a> {
pub fn new(scores: &'a [u32]) -> Self {
HighScores { scores }
}
pub fn scores(&self) -> &[u32] {
self.scores
}
pub fn latest(&self) -> Option<u32> {
self.scores.last().cloned()
}
pub fn personal_best(&self) -> Option<u32> {
self.scores.iter().max().cloned()
}
pub fn personal_top_three(&self) -> Vec<u32> {
let mut res_vec = self.scores.to_vec();
res_vec.sort_unstable_by(|a, b| a.cmp(b).reverse());
res_vec.truncate(3);
res_vec
}
}
源练习练习
这是由于终生省略规则
考虑以下不起作用的新代码:
pub fn new(scores: &[u32]) -> Self {
HighScores { scores }
}
error[E0621]: explicit lifetime required in the type of `scores`
同:
pub fn new(scores: &[u32]) -> HighScores<'a> {
HighScores { scores }
}
返回自
与返回您当前实现的类型(HighScores
还应该注意的是,您的
impl Header
中声明的生命周期不适用于函数输入的生命周期省略。
您可以通过设置输入的生存期来解决此问题:
pub fn new(scores: &'a [u32]) -> Self {
HighScores { scores }
}
或删除输出生存期:
pub fn new(scores: &[u32]) -> HighScores<'_> {
HighScores { scores }
}
根据我的理解,类被声明为final,以防止它被扩展/继承。因此,我认为在这方面可能会有安全性,也可能会有一些性能提升。 但这背后是否有一个非常具体的设计决策?比如说:实现某种设计模式?我确实在这里绕了一个类似的线!但答案并不是我想要的
Safari不接受我输入的时间格式,原因是什么? 我找到了解决办法;
声明浮动时,我们可以通过两种方式将其接受为浮动: 在一种情况下,我可以将所有两种类型的值标记为数据类型,但在另一种情况下,我不能这样做,这是不符合逻辑的。 为什么?
我使用ADAL库获取资源的访问令牌。有人知道过期时间是什么格式吗?更具体地说。 类只在解析后返回int32。所以,这不是一个好的指标。 尝试将其解析为和,但这些值相隔不到90分钟。几乎是一样的。 这是我从fiddler获得的和声明(用于https://jwt.io/解析令牌) :1475874457 :1475878357 价值观没有那么大的差异。
那么在上述任何一个声明中, 为什么和不引用同一个对象?
我在中使用带有4.1版本模拟器的android最新版本sdk。一切都很好。但是在我的中,对于任何应用程序的每次运行,我都会得到以下语句。 即使在Hello world应用程序中,我也得到相同的logcat输出。我没有在我的应用程序中使用多线程。有人能告诉我为什么在我的logcat中得到这些日志。 这是我的密码 在我的异步任务中,我从服务器获取JSONArray,解析它并列出。