为什么会出现这个错误?我们不能在函数括号内使用格式宏吗?

San*_*mas -1 fltk rust rust-cargo

代码:

fltk::frame::Frame::new(0,0, 300, 100, format!("side item {}", i));
Run Code Online (Sandbox Code Playgroud)

输出错误:

the trait `std::convert::From<std::string::String>` is not implemented for `std::option::Option<&'static str>`
Run Code Online (Sandbox Code Playgroud)

jus*_*nas 5

format!()产生 a String,而Frame::new需要一个(可选)&'static str,即一个字符串切片,它将在程序的整个生命周期内都存在。

这几乎意味着您只能使用字符串文字。所以不,你不能直接使用format!(). 似乎 FLTK 不打算以这种方式使用动态分配的字符串。

有一个 hack 可以使用Box::leak. 但请注意,它会按照它在罐头上所说的做 - 它会泄漏内存,除非您Box::from_raw()在小部件销毁后通过回收它。

let leaked_title = &*Box::leak(format!("abc {}", 1).into_boxed_str())
fltk::frame::Frame::new(0,0, 300, 100, leaked_title);
Run Code Online (Sandbox Code Playgroud)