使用 为 CLI 程序编写测试的最惯用的方法是什么clap?我目前正在这样做:
#[derive(Debug, Parser)]
#[clap(author, version, about)]
pub struct StructArgs {
#[clap(subcommand)]
pub command_type: CommandType,
}
#[derive(Debug, Subcommand)]
pub enum CommandType {
Command1(Command1Args),
...
}
#[derive(Debug, Args)]
pub struct Command1Args {
pub field: String,
...
}
impl Command1Args {
...
}
#[test]
fn test_do_stuff() {
let args = StructArgs::try_parse_from(
std::iter::once("<PROGRAM NAME>")
.chain(
["<ARG 1>", ..., "<ARG n>"]
.iter()
.cloned()
)
);
if let CommandType::Command1(command1_args) = args.command_type {
// do stuff with command1_args
} else {
panic!(); …Run Code Online (Sandbox Code Playgroud) 我正在从书中学习 Rust,并且正在处理第 8 章末尾的练习,但是在将单词转换为 Pig Latin 的问题上我遇到了困难。我想具体看看我是否可以将 a 传递&mut String给一个接受 a (也接受切片)的函数&mut str并修改其中引用的字符串,以便将更改反射回外部而不需要 a return,就像在 C 中使用 a 一样char **。
我不太确定我只是搞乱了语法,还是由于 Rust 的严格规则而导致它比听起来更复杂,而我还没有完全掌握这些规则。对于里面的终身错误,to_pig_latin()我记得读过一些解释如何正确处理这种情况的东西,但现在我找不到它,所以如果你也能为我指出它,我将非常感激。
另外,您对我处理字符串内的字符和索引的方式有何看法?
use std::io::{self, Write};
fn main() {
let v = vec![
String::from("kaka"),
String::from("Apple"),
String::from("everett"),
String::from("Robin"),
];
for s in &v {
// cannot borrow `s` as mutable, as it is not declared as mutable
// cannot borrow data in a `&` reference as mutable
to_pig_latin(&mut s);
}
for …Run Code Online (Sandbox Code Playgroud) 免责声明:我知道这个问题的存在,但它目前尚未解决,我试图提供额外的信息,而不用无用的答案污染该问题,无论如何都无法解决问题。
我有一个带有默认镜像的前置摄像头的自定义设备,因此我想正常显示预览,并且需要水平翻转PreviewView的内容,但我被卡住了。过去其他人建议使用,PreviewView#setScaleX(-1)但它要么根本不起作用,要么需要在代码中的一个非常特定的点调用它,而我还没有找到。
下面的代码是CameraFragment.kt官方CameraXBasic示例中的简化版本;我已经添加了评论,我已经厌倦了打电话viewFinder.scaleX = -1f但没有成功。老实说,我真的不认为这个地方有什么区别,因为如果我用 1 以外的任何值调用它,它与 和 都可以正常工作scaleX,scaleY但它总是忽略负号,所以它永远不会翻转。
private lateinit var viewFinder: PreviewView
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
...
viewFinder = view.findViewById(R.id.view_finder)
// HERE
viewFinder.post {
// HERE
setupCamera()
}
}
private fun setupCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_FRONT)
.build()
val preview = Preview.Builder()
.build()
.also {
// HERE
it.setSurfaceProvider(viewFinder.surfaceProvider)
} …Run Code Online (Sandbox Code Playgroud) 我需要读取一个文本文件,并且readLines()我已经找到了这个问题,但是答案中的代码总是使用javaClass;的一些变体。它似乎只能在类中工作,而我只使用一个简单的 Kotlin 文件,没有声明类。这样写在语法上是正确的,但它看起来真的很难看,而且它总是返回null,所以它一定是错误的:
val lines = object {}.javaClass.getResource("file.txt")?.toURI()?.toPath()?.readLines()
Run Code Online (Sandbox Code Playgroud)
当然我可以像这样指定原始路径,但我想知道是否有更好的方法:
val lines = File("src/main/resources/file.txt").readLines()
Run Code Online (Sandbox Code Playgroud)