Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust &引用;恐慌于';断言失败:开始<;=完";使用地图时_Rust - Fatal编程技术网

Rust &引用;恐慌于';断言失败:开始<;=完";使用地图时

Rust &引用;恐慌于';断言失败:开始<;=完";使用地图时,rust,Rust,我刚开始接触铁锈 fn main() { let s = "aaabbb\naaaccc".to_string(); let a: Vec<&str> = s.split('\n').map(|s| s.slice_chars(3, s.len())).collect(); assert_eq!(a, vec!["bbb", "ccc"]); } 这些是回溯 $ RUST_BACKTRACE=1 cargo run Running `tar

我刚开始接触铁锈

fn main() {
    let s = "aaabbb\naaaccc".to_string();
    let a: Vec<&str> = s.split('\n').map(|s| s.slice_chars(3, s.len())).collect();
    assert_eq!(a, vec!["bbb", "ccc"]);
}
这些是回溯

$ RUST_BACKTRACE=1 cargo run
     Running `target/hello_world`
thread '<main>' panicked at 'assertion failed: begin <= end', /Users/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-mac/build/src/libcore/str/mod.rs:1478
stack backtrace:
   1:        0x1091266b3 - sys::backtrace::write::hc8e3cee73e646c590nC
   2:        0x10912ba0e - panicking::on_panic::h00b47941f5bc8a02HOL
   3:        0x109110de8 - rt::unwind::begin_unwind_inner::h539538ef7f909326UvL
   4:        0x1091115fe - rt::unwind::begin_unwind_fmt::h7ee8242816be0431quL
   5:        0x10912b29e - rust_begin_unwind
   6:        0x10914a487 - panicking::panic_fmt::hbdb6961ecc952cf7cSv
   7:        0x10914a35a - panicking::panic::h2860b801a6212420fQv
   8:        0x10914bfd1 - str::str.StrExt::slice_chars::hb48fc0a9452c1b98PGD
   9:        0x109110791 - str::StrExt::slice_chars::h13298185343564271120
  10:        0x10910fe14 - main::closure.2239
  11:        0x10910fd13 - iter::Map<I, F>::do_map::h17245677587133977247
  12:        0x10910e7dd - iter::Map<I, F>.Iterator::next::h11146527951811133470
  13:        0x10910dc39 - vec::Vec<T>.FromIterator<T>::from_iter::h11956274897938765189
  14:        0x10910d8bf - iter::IteratorExt::collect::h15101737251385262689
  15:        0x109106f22 - main::h2fa2dff98d35cbb8faa
  16:        0x10912d279 - rust_try_inner
  17:        0x10912d266 - rust_try
  18:        0x10912c1f2 - rt::lang_start::h660a0b4ce4c9ac40HIL
  19:        0x109106f9f - main

你超出了你的底线。下面是一个例子:

fn main() {
    let s = "a";
    let s2 = s.slice_chars(3, s.len());
}

我真的不知道你为什么要做这个切片,所以很难推荐一个更好的解决方案。

我想这是因为
git
的输出没有你所期望的格式:这可能是因为有一行
len()
小于3 in
s.slice\u chars(3,s.len())
,这对于这个函数是无效的。因此,您需要确保正确理解格式,和/或例如,将调用括在
if
中,例如
if。。。{s.slice_chars(3,s.len())}else{“}


此外,这里还有一个域不匹配:
slice\u chars
对代码点进行操作,但是
s.len()
返回字符串中的字节数。字节和代码点不一定相等(事实上,当字符串为纯ASCII时,它们仅在UTF-8中相等),因此您应该使用
char\u len
(到处使用代码点),或者使用
s[3..]
(到处使用字节).

如果程序的输出包含长度小于3个字符的行(例如,仅包含换行符的行),则代码将失败

您尚未描述要执行的操作,但一种可能的解决方案是筛选出少于3个字符的行:

#![feature(process, collections)]
use std::process::Command;

fn main() {
    let output = Command::new("git").args(&["status", "--porcelain"]).output().unwrap_or_else(|e| {
      panic!("failed to execute process: {}", e)
    });

    let s = String::from_utf8_lossy(output.stdout.as_slice()).to_string();
    let a: Vec<&str> = s.split('\n')
        .filter(|s| s.len() >= 3)
        .map(|s| s.slice_chars(3, s.len()))
        .collect();
}
#![功能(流程、集合)]
使用std::process::命令;
fn main(){
让output=Command::new(“git”).args(&[“status”,“--ceral”]).output().unwrap_或_else(| e|{
死机!(“无法执行进程:{}”,e)
});
设s=String::from_utf8_lossy(output.stdout.as_slice())to_String();
设a:Vec=s.split('\n')
.filter(|s | s.len()>=3)
.map(| s | s.slice_chars(3,s.len()))
.收集();
}

感谢您让我知道域不匹配的情况!请确保投票选出有用的答案,如果答案解决了您的问题,请将其标记为已接受!如果没有答案是可以接受的,考虑留下解释原因的评论,或者编辑你的问题以不同的方式来表述问题。
fn main() {
    let s = "a";
    let s2 = s.slice_chars(3, s.len());
}
#![feature(process, collections)]
use std::process::Command;

fn main() {
    let output = Command::new("git").args(&["status", "--porcelain"]).output().unwrap_or_else(|e| {
      panic!("failed to execute process: {}", e)
    });

    let s = String::from_utf8_lossy(output.stdout.as_slice()).to_string();
    let a: Vec<&str> = s.split('\n')
        .filter(|s| s.len() >= 3)
        .map(|s| s.slice_chars(3, s.len()))
        .collect();
}