提问人:Jim 提问时间:7/18/2023 最后编辑:kmdrekoJim 更新时间:9/19/2023 访问量:198
返回 Option<Vec<_>> 还是只返回一个空的 Vec<_>更好?
Is it better to return an Option<Vec<_>> or just an empty Vec<_>?
问:
假设我正在编写一个函数,该函数采用一堆字符串并过滤掉“坏”字符串。
然后,该函数返回一些字符串,但有可能过滤掉所有字符串。
所以我想知道,我应该在这里使用吗?我可以看到该函数在所有字符串都“坏”时返回选项变体,并在字符串“好”时返回变量是有道理的。Option
None
Some
函数签名可能如下所示:
pub fn filter_strings(inputs: Vec<String>) -> Option<Vec<String>> {
// Todo...
}
但是,这样做真的有什么意义吗?Option
这是否会使事情变得不必要地变得更加复杂,因为消费者现在需要检查变体以及它返回空向量的情况?None
Some
在 Rust 中,在这里只返回一个字符串向量是否更简单、更“惯用”?
pub fn filter_strings(inputs: Vec<String>) -> Vec<String> {
// Todo...
}
或者在这里使用我缺少的一些优势?Option
答:
10赞
Colonel Thirty Two
7/18/2023
#1
如果你问是否可以盲目地用 替换返回一个空向量,不要 - 只需删除并返回一个空向量。这使得使用返回值的代码变得容易得多 - 当没有理由时,它们不必专门处理空向量。空向量不会从堆中分配任何内存,因此甚至没有性能原因。None
Option
但是,在某些情况下,这种区分可能是有用的。 可能表示“未知”,而可能表示“已知为空”。在设计软件时,上下文很重要。None
Some(vec![])
1赞
rustyhu
7/18/2023
#2
根据上下文,使用以下方法可能会有所帮助:Option<Vec>
- 遵循样式或约定(例如,已经有一组接口函数返回
Option<_>
); - 为了方便传递给其他接受 s 的接口;
Option
- 以适应某些泛型
Option<T>
;
在其他情况下,我更喜欢不返回,因为它更简单,在大多数情况下,您希望使用空来代替。Option
None
Vec
评论
None
Some([])
Option
Vec