首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当在单独的文件中定义时,structopt无法找到其Args解析器。

当在单独的文件中定义时,structopt无法找到其Args解析器。
EN

Stack Overflow用户
提问于 2021-10-25 22:07:43
回答 1查看 92关注 0票数 0

我从铁锈的命令行工具开始,一开始就撞到了墙上。如果在StructOpt中定义了Opt结构,我可以使用main.rs解析命令行参数,但是由于我希望能够将Opt结构传递到库代码中,所以我在自己的文件中定义它,以便库的其他部分知道它的全部内容。

下面是抛出最少错误的代码的版本,尽管我承认,它主要是通过尝试编译器建议的内容和一些随机的建议来拼凑在一起的,所以它可能是完全错误的。

我得到的构建错误是:

代码语言:javascript
复制
$ cargo run
   Compiling basic v0.1.0 (/home/mpalmer/src/action-validator/blobble)
error[E0433]: failed to resolve: maybe a missing crate `structopt`?
 --> src/opt.rs:8:5
  |
8 |     /// Activate debug mode
  |     ^^^^^^^^^^^^^^^^^^^^^^^ not found in `structopt::clap`
  |
help: consider importing this struct
  |
3 | use opt::structopt::clap::Arg;
  |

For more information about this error, try `rustc --explain E0433`.
error: could not compile `basic` due to previous error
$ cargo --version
cargo 1.56.0 (4ed5d137b 2021-10-04)
$ rustc --version
rustc 1.56.0 (09c42c458 2021-10-18)

(是的,为了以防万一,我尝试过添加use opt::structopt::clap::Arg;,但是错误并没有消失,我收到了一个关于未使用的导入的警告--同时还被告知尝试添加未使用的use,这很有趣)

Cargo.toml

代码语言:javascript
复制
[package]
name = "basic"
version = "0.1.0"
authors = ["User"]

[dependencies]
structopt = "0.3"

src/main.rs

代码语言:javascript
复制
extern crate basic;
extern crate structopt;

use basic::Opt;
use structopt::StructOpt;

fn main() {
    let opt = Opt::from_args();
    println!("{:#?}", opt)
}

src/lib.rs

代码语言:javascript
复制
mod opt;

pub use crate::opt::Opt;

src/opt.ts

代码语言:javascript
复制
extern crate structopt;

use self::structopt::StructOpt;

#[derive(StructOpt, Debug)]
#[structopt(name = "basic")]
pub struct Opt {
    /// Activate debug mode
    #[structopt(short,long)]
    debug: bool,
}

感谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 08:37:41

工作版本是

Cargo.toml

代码语言:javascript
复制
[package]
name = "basic"
version = "0.1.0"
authors = ["User"]
edition = "2018"

[dependencies]
structopt = "0.3"

lib.rs

代码语言:javascript
复制
#[macro_use] extern crate structopt;
use structopt::StructOpt;

pub mod opt;

opt.rs

代码语言:javascript
复制
#[derive(StructOpt, Debug)]
#[structopt(name = "basic")]
pub struct Opt {
    /// Activate debug mode
    #[structopt(short,long)]
    debug: bool,
}

main.rs

代码语言:javascript
复制
#[macro_use] extern crate structopt;
use structopt::StructOpt;

fn main() {
    let opt = basic::opt::Opt::from_args();
    println!("{:#?}", opt);
}

您需要声明use structopt::StructOpt,因为from_args特性必须在作用域中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69715302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档