4个版本 (2个稳定版)
1.1.1 | 2021年10月7日 |
---|---|
1.0.0 | 2021年10月7日 |
0.1.1 | 2021年10月7日 |
0.1.0 | 2021年10月6日 |
#1706 in 过程宏
21KB
357 行
macro-ruby
一个在编译时通过Ruby生成Rust代码的crate。(已测试与mruby 3.0.0兼容)
要求
确保你的mruby
在PATH
中。
如何使用
use macro_ruby::ruby_code_str;
// ruby_code_str! generates a &str based on what has been printed from Ruby.
assert_eq!(
ruby_code_str!("puts 'hi'"),
"hi\n"
);
assert_eq!(
ruby_code_str!("print 'hi'"),
"hi"
);
use macro_ruby::ruby_code_to;
// ruby_code_to! generates a value which type is based off of input
// and the content on what has been printed from Ruby.
assert_eq!(
ruby_code_to!(i32 "print 500+500"),
1000
);
assert_eq!(
ruby_code_to!(u8 "print 500+500"), // Will panic because u8 overflows
1000
);
use macro_ruby::ruby_code_ast;
// ruby_code_ast! generates real rust code based on what has been printed
ruby_code_ast!(r#"
puts "let a = 1;"
"#)
assert_eq!(a, 1);
如果你想从外部文件执行Ruby代码,可以使用我们宏的file
变体
字符串版本 | 文件版本 |
---|---|
ruby_code_str! |
ruby_file_str! |
ruby_code_to! |
ruby_file_to! |
ruby_code_ast! |
ruby_file_ast! |
使用YARV代替mruby
如果你想使用YARV(官方Ruby解释器)而不是mruby,只需启用“yarv”或“full”特性(yarv和full是别名)。
所以在我们的cargo.toml中我们将有
[dependencies]
macro-ruby = { version = current_version, features = ["yarv"] }
或
[dependencies]
macro-ruby = { version = current_version, features = ["full"] }
(其中current_version是macro-ruby的实际当前版本)