这个问题可能是同一个问题的这一个,但现在看来,一个的提问者还没有添加足够的信息来获得一个有用的响应。
我正在尝试使用JDK和JavaFx SDK版本11.0.2运行JavaFx应用程序。
此代码完全按预期工作,从而产生一个空窗口:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
public void start(Stage primaryStage) throws Exception {
StackPane root = new StackPane();
primaryStage.setScene(new Scene(root, 420, 420));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试向添加标签StackPane,则会引发异常。
import ...
import javafx.scene.control.Label;
public class Main extends Application {
public void start(Stage primaryStage) throws Exception {
StackPane root = new StackPane();
root.getChildren().add(new Label("42"));
primaryStage.setScene(new Scene(root, 420, 420));
primaryStage.show();
} …Run Code Online (Sandbox Code Playgroud) 如何将 a 转换f64为最接近的f32?
既没有实现From也没有TryFrom实现,大概是因为此类实现仅提供用于无损转换。f32我还在文档中搜索了参考文献f64,反之亦然,但一无所获。
let double: f64 = 0.;
// doesn't work
// let single: f32 = double.into();
// let single: f32 = double.try_into().unwrap();
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个Vecof TokenStreams,然后在另一个quote!宏中使用该列表:
let list: Vec<_> = some_data
.iter()
.map(
|item| {
quote!{/*...*/}
},
)
.collect();
let generated = quote! {
fn hello_world() {
#(list);*
}
};
Run Code Online (Sandbox Code Playgroud)
但是,在编译时,我收到此错误:
expected struct `HasIterator`, found struct `ThereIsNoIteratorInRepetition`
Run Code Online (Sandbox Code Playgroud)
从宏的文档来看,它似乎TokenStream在插值中应该有效,因为它实现了该ToTokens特征。此外,该列表是 a Vec,它也明确允许在循环插值中使用。
ThereIsNoIteratorInRepetition当我明确使用有效的迭代器时,为什么会收到错误?
我有2个宏。第一个是special_trait,一个用于特征声明的属性宏,第二个useful_macro是与这样的特征一起使用。
也就是说,用户代码会这样写:
#[special_trait]
pub trait MyTrait{}
// meanwhile, in a different file...
use some_mod::MyTrait;
useful_macro!(MyTrait);
Run Code Online (Sandbox Code Playgroud)
现在,special_trait宏需要以可以使用它MyTrait的方式分配一些元数据useful_macro。
这是可能的吗?
我突然想到我可以要求所有用户代码指定特征的完整路径,而不是依赖于use:
#[special_trait]
pub trait MyTrait{}
// meanwhile, in a different file...
useful_macro!(some_mod::MyTrait);
Run Code Online (Sandbox Code Playgroud)
然后,special_trait只需要定义一个pub const MyTrait_METADATA: i32 = 42, 并且useful_macro可以找到这个元数据 const 的some_mod::MyTrait路径,因为它有完整的路径,只需要更改最后一段:some_mod::MyTrait_METADATA。
但是,禁止use和要求完整路径似乎很卑鄙,如果有更好的方法,我不想这样做。
我是否可以将元数据常量与特征相关联,以便任何可以“访问”特征的宏也可以找到元数据?