为什么会出现这个错误?我们不能在函数括号内使用格式宏吗?
Why this error? Cannot we use format macro inside function parenthesis?
代码:
fltk::frame::Frame::new(0,0, 300, 100, format!("side item {}", i));
输出错误:
the trait `std::convert::From<std::string::String>` is not implemented for `std::option::Option<&'static str>`
format!()
产生一个 String
,而 Frame::new 期望一个(可选的)&'static str
,即一个在整个程序生命周期中都有效的字符串切片.
这几乎意味着您只能使用字符串文字。所以不行,不能直接用format!()
。似乎 FLTK 不打算以这种方式使用动态分配的字符串。
使用 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);
默认的 ::new 构造函数需要一个 Into<Option<&'static str>>
,因此如果您的 &str
不是静态的,您可以使用 with_label()
或 set_label()
.
fltk::frame::Frame::new(0,0, 300, 100, None).with_label(&format!("side item {}", i));
或
let mut my_frame = fltk::frame::Frame::new(0,0, 300, 100, None);
my_frame.set_label(&format!("side item {}", i));
代码:
fltk::frame::Frame::new(0,0, 300, 100, format!("side item {}", i));
输出错误:
the trait `std::convert::From<std::string::String>` is not implemented for `std::option::Option<&'static str>`
format!()
产生一个 String
,而 Frame::new 期望一个(可选的)&'static str
,即一个在整个程序生命周期中都有效的字符串切片.
这几乎意味着您只能使用字符串文字。所以不行,不能直接用format!()
。似乎 FLTK 不打算以这种方式使用动态分配的字符串。
使用 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);
默认的 ::new 构造函数需要一个 Into<Option<&'static str>>
,因此如果您的 &str
不是静态的,您可以使用 with_label()
或 set_label()
.
fltk::frame::Frame::new(0,0, 300, 100, None).with_label(&format!("side item {}", i));
或
let mut my_frame = fltk::frame::Frame::new(0,0, 300, 100, None);
my_frame.set_label(&format!("side item {}", i));