3 个版本
0.1.2 | 2019 年 8 月 27 日 |
---|---|
0.1.1 | 2019 年 8 月 16 日 |
0.1.0 | 2019 年 7 月 26 日 |
23 in #quickjs
用于 qjs-derive
1MB
6K SLoC
qjs
qjs
是 QuickJS JavaScript 引擎的实验性 Rust 绑定
用法
要在项目中使用 qjs
,请将以下内容添加到您的 Cargo.toml 文件中
[dependencies]
qjs = "0.1"
示例
let v: Option<i32> = qjs::eval("1+2").unwrap();
assert_eq!(v, Some(3));
lib.rs
:
qjs
是 QuickJS JavaScript 引擎的实验性 Rust 绑定
示例
qjs
宏可以在匿名上下文中执行 JavaScript 代码。
use qjs::qjs;
let v: i32 = qjs!(1+2).unwrap().unwrap();
assert_eq!(v, 3);
qjs
宏还可以将 JavaScript 闭包转换为 Rust 函数。
use qjs::qjs;
let f = qjs!{ (name: &str) -> String => { return "hello " + name; } };
let s: String = f("world").unwrap().unwrap();
assert_eq!(s, "hello world");
变量插值使用 #var
完成(类似于 $var
在 macro_rules!
宏中)。这会获取当前作用域中的 var 变量,并在输出令牌的相应位置插入它。
use qjs::qjs;
let f = |name| qjs!{ "hello " + #name };
let s: String = f("world").unwrap().unwrap();
assert_eq!(s, "hello world");
原始类型,包括 bool
、i32
、i64
、u64
、f64
、String
等,以及实现 NewValue
特质的其他类型可以在变量插值中使用。
参数实现 ExtractValue
特质且输出类型实现 NewValue
特质的函数也可以用于变量插值。
use qjs::qjs;
fn hello(name: String) -> String {
format!("hello {}", name)
}
let hello: fn(String) -> String = hello;
//let s: String = qjs!{ #hello ("world") }.unwrap().unwrap();
// assert_eq!(s, "hello world");
依赖项
~2.4–5MB
~82K SLoC