我正在尝试访问已实例化的特定clap::App
的版本。但是,字段version
和公共功能version()
以下是源代码的相关内容:
pub struct App<'a, 'v, 'ab, 'u, 'h, 'ar> {
// ...
version: Option<&'v str>,
// ...
}
impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
// ...
pub fn version(mut self, v: &'v str) -> Self {
self.version = Some(v);
self
}
// ...
}
我的代码:
pub fn build_cli() -> App<'static, 'static> {
App::new("my-pi")
.version("0.1.0")
// ...
let app = build_cli();
assert_eq!(app.version, "0.1.0"); // <-- Error here
version
上同时存在字段version()
和功能App
。怎么会这样?以及如何访问字段version
?
错误:
error[E0615]: attempted to take value of method `version` on type `clap::App<'_, '_>`
--> src/cli.rs:27:21
|
27 | assert_eq!(app.version, "0.1.0");
| ^^^^^^^
|
= help: maybe a `()` to call it is missing?
答案 0 :(得分:6)
怎么可能?
语言的定义方式使字段和方法之间没有冲突。
如何访问字段版本?
您不能:它是私有的,没有getter方法。
答案 1 :(得分:5)
通过访问该字段,您将访问一个与函数名称相同的字段:
struct Example {
foo: i32,
}
impl Example {
fn foo(&self) -> i32 {
self.foo + 100
}
}
fn main() {
let ex = Example { foo: 42 };
println!("{}", ex.foo);
println!("{}", ex.foo());
}
假定没有括号,您需要该字段的值。
另请参阅: