我正在尝试创建一个对通用数字类型进行抽象的特征。指定我希望 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) 我正在尝试弄清楚如何使用 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 …