4 个版本
0.0.4 | 2019年1月6日 |
---|---|
0.0.3 | 2019年1月5日 |
0.0.2 | 2019年1月4日 |
0.0.1 | 2019年1月4日 |
17 in #后缀
用于 tilde_derive
12KB
214 行
目的
这个 tilde
包利用已弃用的波浪号运算符 ~
为 Rust 程序生成语法糖。
特性
- 后缀宏。语法为
first_arg.~the_macro!(rest_args)
,将被转换成the_macro!( first_arg, rest_args )
。如 简单后缀宏 #2442 所建议,first_arg
将只计算一次。
示例:后缀宏
macro_rules! inc { ($e:expr) => { $e+1 }}
假设 i: i32
,库用户可以编写:i.~inc!()
,i.clone().~inc!()
等,这相当于 inc!( i )
和 inc!( i.clone() )
的糖。
此功能符合 RFC 2442
macro_rules! log_value {
( $self:expr, $msg:expr ) => ({
$self.1.push_str( &format!( "{}:{}: {}: {:?}", file!(), line!(), $msg, $self.0 ));
$self
})
}
fn value<T: std::fmt::Debug>( x: T, log: &mut String ) -> (T,&mut String) {
log.push_str( &format!( "evaluated {:?}\n", x ));
( x, log )
}
tilde! {
#[test]
fn rfc_pr_2442() {
let mut log1 = String::new();
let mut log2 = String::new();
( value( "hello", &mut log1 ).~log_value!( "value" ).0.len(), &mut log2 ).~log_value!( "len" );
let log = format!( "{}\n{}", log1, log2 );
assert_eq!( log, r#"evaluated "hello"
tilde_derive/src/lib.rs:72: value: "hello"
tilde_derive/src/lib.rs:72: len: 5"#
);
}
}
- 后缀函数。语法为
first_arg.~the_fn(rest_args)
,将被转换成the_fn!( first_arg, rest_args )
。
示例:后缀函数
fn inc( i: i32 ) -> i32 { i + 1 }
假设 i: i32
,库用户可以编写:i.~inc()
,i.clone().~inc()
等,这相当于inc( i )
和inc( i.clone() )
。
将来还将增加更多功能。
许可证
MIT许可证下。