小编Ske*_*nxf的帖子

如何为类型引用的操作指定通用特征?

我正在尝试创建一个对通用数字类型进行抽象的特征。指定我希望 trait 需要T + T(即T: Add<T>)很容易。我什至可以指定T + &T在特征中,然后在实现该特征的某种类型的泛型函数中使用它。

然而,当我尝试为&T + T(ie for<'a> &'a Self: Add<Self>) 和&T + &T特征添加约束时,我遇到了问题。奇怪的是impl,在为数字特征编写毯子时,以及在为该特征的任何类型编写通用函数时,我可以毫无问题地指定这些相同的约束,但是我无法让编译器让我只指定这些约束一次相反的特质。

简化示例

use std::ops::Add;

trait Numeric where
    Self: Sized,
    // T + T
    Self: Add<Output = Self>,
    // T + &T
    Self: for<'a> Add<&'a Self, Output = Self>,
    // &T + T
    // should specify &T + T on this trait but instead causes compile
    // errors everywhere I try …
Run Code Online (Sandbox Code Playgroud)

generics traits rust

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

如何使用 wasm-bindgen 和 --target no-modules 导入 JavaScript 函数?

我正在尝试弄清楚如何使用 Rust 和 wasm-bindgen 调用 JavaScript 函数。由于缺乏浏览器支持,我无法将 wasm-bindgen 与 ES6 模块与 Web Worker 一起使用。

据我所知,声明存在一个 JavaScript 函数供我在 Rust 端调用是很简单的

#[wasm_bindgen]
extern {
    fn logProgress(percent: f64);
}
Run Code Online (Sandbox Code Playgroud)

但是我不知道在哪里定义 JavaScript 实现。如果我尝试从 JavaScript 调用 Rust 函数来调用 undefined,logProgress那么我会收到运行时错误:Error: logProgress is not defined

我可以从 wasm-bindgen 文档中看到,如果我将 wasm-bindgen 与 ES6 模块一起使用,那么我可以将 rust 代码更改为

#[wasm_bindgen(module = "/progress.js")]
extern {
    fn logProgress(percent: f64);
}
Run Code Online (Sandbox Code Playgroud)

并在中声明 JavaScript 函数progress.js

export function logProgress(percent) {
    console.log(percent)
    // actual implementation would not just log
}
Run Code Online (Sandbox Code Playgroud)

由于我是通过全局导入 Rust …

javascript rust webassembly wasm-bindgen

7
推荐指数
1
解决办法
1696
查看次数

标签 统计

rust ×2

generics ×1

javascript ×1

traits ×1

wasm-bindgen ×1

webassembly ×1