小编Rei*_*iks的帖子

创建标签时的JavaFX 11:IllegalAccessError

这个问题可能是同一个问题的这一个,但现在看来,一个的提问者还没有添加足够的信息来获得一个有用的响应。

我正在尝试使用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)

java javafx intellij-idea javafx-11

12
推荐指数
1
解决办法
6061
查看次数

如何将“f64”转换为“f32”?

如何将 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)

floating-point casting type-conversion rust

10
推荐指数
1
解决办法
5634
查看次数

当尝试使用“quote!”重复向量时,“找到结构‘ThereIsNoIteratorInRepetition’”

我正在尝试创建一个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当我明确使用有效的迭代器时,为什么会收到错误?

rust rust-macros

8
推荐指数
1
解决办法
866
查看次数

如何将“元数据”分配给特征?

我有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和要求完整路径似乎很卑鄙,如果有更好的方法,我不想这样做。

我是否可以将元数据常量与特征相关联,以便任何可以“访问”特征的宏也可以找到元数据?

rust rust-macros

3
推荐指数
1
解决办法
75
查看次数