使用#![no_std]时如何访问StrExt等核心特征?

时间:2014-12-29 23:29:12

标签: rust

我正在尝试用#![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

的替代方法

2 个答案:

答案 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::preludecore中提供的功能。您可以像use core::prelude::*;一样导入它。

答案 1 :(得分:2)

core::str::StrExt是否可以自动使用?我没有使用![no_std]编译内容的设置,但是我通过添加

在Playpen中经历了一些箍
#![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 {} }