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