Rust使用println!打印时报`()`无法使用默认格式化器错误
报错原因
- 核心问题是
mystring.rs中的return_string函数未声明返回值类型。Rust 中没有显式标注返回值类型的函数,默认返回单元类型()(空元组,等价于其他语言的void类型),即使你在函数体内写了return "Some String",编译器也不会按字符串类型处理返回值,函数最终实际返回的是()。 - 单元类型
()没有实现Display特征,无法被println!宏的{}默认格式化器识别,直接触发你看到的编译报错。 - 你的调用代码还有两处额外的写法错误,哪怕修正了返回值类型也会编译失败:一是模块名不匹配,你声明的模块名为
mystring,调用时却写了config::return_string();二是普通函数的返回值不能直接赋值给const常量,const要求值在编译期就能确定,普通函数调用属于运行期逻辑,不符合常量赋值要求。
修改方案
- 先修正
mystring.rs中的函数定义,显式标注正确的返回值类型。Rust中字符串字面量的类型是&'static str:
// mystring.rs pub fn return_string() -> &'static str { "Some String" }
注:Rust 支持函数尾表达式自动返回,即最后一行表达式不加分号就会作为返回值,不需要额外写return关键字;如果习惯写return,记得语句末尾要加分号:return "Some String";
- 再修正
main.rs中的调用逻辑,修正模块名,用普通变量绑定接收返回值:
// main.rs mod mystring; fn main() { let test = mystring::return_string(); println!("{}", test); }
修改完成后编译运行,即可正常打印出Some String。
如果确实需要用常量接收返回值,可以把return_string标记为常量函数,再显式标注常量类型即可:
// mystring.rs pub const fn return_string() -> &'static str { "Some String" } // main.rs mod mystring; const TEST: &str = mystring::return_string(); fn main() { println!("{}", TEST); }
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

