Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何使用std::convert::Into转换可能失败的内容?_Rust - Fatal编程技术网

Rust 如何使用std::convert::Into转换可能失败的内容?

Rust 如何使用std::convert::Into转换可能失败的内容?,rust,Rust,我想一个函数,可以接受各种类型,可以转换为我的特定类型。在类似情况下,我会使用(或): pub结构神话; impl神话{ 神话 } } fn main(){} 作为一个额外的问题,在我的特殊情况下,转换可能会失败。通常,我会用它来表示一个可能失败的操作。将这两个概念结合在一起: pub结构神话; 发布结构错误; impl结果{ 如果self.len()%2==0{ Ok(神话) }否则{ 错误 } } } fn main(){} 不幸的是,这似乎违反了连贯性规则: error: the im

我想一个函数,可以接受各种类型,可以转换为我的特定类型。在类似情况下,我会使用(或):

pub结构神话;
impl神话{
神话
}
}
fn main(){}
作为一个额外的问题,在我的特殊情况下,转换可能会失败。通常,我会用它来表示一个可能失败的操作。将这两个概念结合在一起:

pub结构神话;
发布结构错误;
impl结果{
如果self.len()%2==0{
Ok(神话)
}否则{
错误
}
}
}
fn main(){}
不幸的是,这似乎违反了连贯性规则:

error: the impl does not reference any types defined in this crate;
only traits defined in the current crate can be implemented for
arbitrary types [E0117]
我发现我可以创造自己的特质:

struct神话;
结构错误;
特质神话化{
fn进入(自我)->结果;
}
impl结果{
如果self.len()%2==0{
Ok(神话)
}否则{
错误
}
}
}
fn main(){}
甚至是一种更普遍的特征:

struct神话;
结构错误;
特征可能是{
fn进入(自我)->结果;
}
impl结果{
如果self.len()%2==0{
Ok(神话)
}否则{
错误
}
}
}
fn main(){}

但是有什么方法可以重用标准库中的组件来实现我的目标吗?

这是不可能的,因为一致性规则使得这样的事情非常不方便,因为除非为其中一种类型创建一个新类型,
Result
&str
。有关更多信息,请参阅

简而言之,根据RFC规定的新规则,对于板条箱非本地的类型,您无法实现板条箱非本地的特性

  • 修改孤立规则,以便远程特征的impl需要一个本地类型,该类型可以是当前板条箱
    LT=LocalTypeConstructor
    中定义的struct/enum/trait,也可以是对本地类型
    LT=…|的引用< |&mut LT

  • 因此,由于您没有将
    创建到您的板条箱中的
    特征中,也没有创建
    结果
    类型,因此您得到了这个错误。创建一个新类型可以解决这个问题,因为它基本上是将非本地类型包装到本地类型中。

    Oof!RFC是一个野兽,老实说,我从它身上拿走的唯一一件事(这与这个问题有关)是,你不能为一个不属于你的类型定义一个不属于你的特征(该特征的本地特征)。我是不是唯一一个觉得以“不”开头的答案有点傲慢,或者至少有点过于随便的人,不管它的内容多么正确?此外,我承认我对此感觉更强烈,因为@shepmaster经常帮助我,我可以用最高质量的答案来计算,保持他们的风格中立,避免自己因为提问而感到愚蠢。这一点很容易解决,而无需指责我居高临下,尤其是当我打算提供帮助时(以及我的回答历史)表明我不是那样的。我错误地开始了我的回答,在这种情况下,“不”是为了表达一种哀悼的感觉,比如,“不,这是一个遗憾,这是不可能的。”连贯性(这个问题的主题)在《铁锈》中是这种感觉的来源。我不知道我的回答会给人一种什么样的印象,那就是我是居高临下,或者试图让谢普觉得问这个问题很愚蠢。豪尔赫·以色列·佩尼亚——从我的角度来说,没什么好担心的。我明白,有时候最好是在那里添加一个快速的答案,让人们开始行动。我主要是想让你再添加一点散文让答案更经得起时间的考验。@Byron的感觉仍然有效,如果有其他人也有类似的感觉,我也不会感到惊讶。这对我们所有人来说都是一件好事!请注意,我的评论是为了不指责任何人,这只是一个要求反馈的问题r很可能是站在我这边的。从那以后,答案被编辑过,在我看来达到了我所知道的质量。尽管没有说出来,但我高度评价豪尔赫的工作,他无疑是这个社区中非常受欢迎的成员。