我在Rust中使用动态调度指针类型时遇到了一些问题.我想类型的值转换Box<MyTrait>到&mut MyTrait传递给函数.例如,我尝试过:
use std::borrow::BorrowMut;
trait MyTrait {
fn say_hi(&mut self);
}
struct MyStruct { }
impl MyTrait for MyStruct {
fn say_hi(&mut self) {
println!("hi");
}
}
fn invoke_from_ref(value: &mut MyTrait) {
value.say_hi();
}
fn main() {
let mut boxed_trait: Box<MyTrait> = Box::new(MyStruct {});
invoke_from_ref(boxed_trait.borrow_mut());
}
Run Code Online (Sandbox Code Playgroud)
此操作失败,并显示以下错误:
error: `boxed_trait` does not live long enough
--> <anon>:22:5
|
21 | invoke_from_ref(boxed_trait.borrow_mut());
| ----------- borrow occurs here
22 | }
| ^ `boxed_trait` dropped here while still borrowed …Run Code Online (Sandbox Code Playgroud) 在为Java项目开发新的类/方法时,有时您希望让人们试用您的新代码,但又不想保证它在将来的版本中将向后兼容。在这种情况下,使用@Unstable注释之类的东西来通知用户该代码在稳定之前将不具有向后兼容性保证(@Unstable功能与@Deprecated功能不同之处在于可以对其进行更改或删除),这是有意义的。而不被视为重大更改)。这些注释也必须反映在javadoc生成的HTML中,以便用户知道它们。非常乐观,如果您正在使用带注释的代码@Unstable,则出现编译器警告也将很有帮助。
Java中是否有针对此类功能的标准?如果没有,是否可以自定义javadoc以允许此类功能?
我正在为Rust尝试新的wasm32-unknown-unknown目标,并且我遇到了调用数学函数的问题(例如sin,cos,exp,atan2).
Cargo.toml:
[package]
name = "wasm_math"
version = "0.1.0"
authors = ["..."]
[lib]
path = "src/lib.rs"
crate-type = ["cdylib"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
SRC/lib.rs:
#[no_mangle]
pub extern "C" fn invoke_sin(x: f64) -> f64 {
x.sin()
}
Run Code Online (Sandbox Code Playgroud)
index.html的:
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Wasm Math</title></head>
<body></body>
<script>
const imports = { env: { } };
fetch("target/wasm32-unknown-unknown/release/wasm_math.wasm").then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.instantiate(bytes, imports)
).then(results => {
alert(results.instance.exports.invoke_sin(1.0));
});
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
我用命令构建项目
cargo build --release --target wasm32-unknown-unknown
Run Code Online (Sandbox Code Playgroud)
当我在firefox中打开html文件时,出现以下错误:
LinkError: import object field 'sin' is not a …Run Code Online (Sandbox Code Playgroud)