我正在尝试用#![no_std]
集写一些Rust。我试图一次迭代一个str
个字符;然而,通常的技术似乎都不起作用。当我尝试通过str提供的函数访问字符时,例如for c in s.char_indices()
或for c in s.chars()
我收到错误:
type &str does not implement any method in scope named ___
我的理解是str是core
的一部分,因此它实现的任何特征都应该在no_std
中提供。有没有办法访问此功能,或者是迭代str
?
答案 0 :(得分:5)
您需要导入特征才能调用他们的方法,例如
#![no_std]
extern crate core;
use core::str::StrExt;
fn foo(s: &str) {
for c in s.char_indices() {}
}
core
还提供an alternative prelude,其中包含std::prelude
中core
中提供的功能。您可以像use core::prelude::*;
一样导入它。
答案 1 :(得分:2)
core::str::StrExt
是否可以自动使用?我没有使用![no_std]
编译内容的设置,但是我通过添加
#![no_std]
#![feature(lang_items)]
extern crate core;
use core::str::StrExt;
fn main() {
let s = "Hello";
let mut cnt = 0u8;
for c in s.chars() {
cnt += 1;
}
}
#[lang = "stack_exhausted"] extern fn stack_exhausted() {}
#[lang = "eh_personality"] extern fn eh_personality() {}
#[lang = "panic_fmt"] fn panic_fmt() -> ! { loop {} }