Rust 中可选<String>的最佳借用访问器模式是什么?

问题描述 投票:0回答:1

这个 rust-analyzer 风格指南推荐这样的访问器:

struct Person {
    // Invariant: never empty
    first_name: String,
    middle_name: Option<String>
}

impl Person {
    fn first_name(&self) -> &str { self.first_name.as_str() }
    fn middle_name(&self) -> Option<&str> { self.middle_name.as_ref() }
}

但是,当我使用这种模式时,编译器会抱怨

middle_name()
的返回值:

mismatched types
expected enum `std::option::Option<&str>`
   found enum `std::option::Option<&std::string::String>`

如果我将访问器的返回值更改为

Option<&String>
,它就可以工作。但在 Rust 中,人们通常不想使用
&str
而不是
&String
,就像
first_name()
那样吗?如何使用选项来做到这一点?或者
Option<&String>
实际上是正确的模式,而 风格指南 已经过时了?

string rust option-type borrow-checker accessor
1个回答
0
投票

您可以使用

Option::as_deref
Option<&str>
获取
Option<String>

impl Person {
    fn first_name(&self) -> &str { self.first_name.as_str() }
    fn middle_name(&self) -> Option<&str> { self.middle_name.as_deref() }
}

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.