7 个版本
使用旧的 Rust 2015
0.0.6 | 2015年11月28日 |
---|---|
0.0.5 | 2015年11月15日 |
0.0.4 | 2015年8月27日 |
0.0.3 | 2015年3月8日 |
0.0.0 | 2015年1月17日 |
#2205 在 Rust 模式 中
14KB
309 行
包含 (ELF exe/lib, 20KB) 测试,(ELF exe/lib, 20KB) 库
Rust 的关键字参数
这个包提供了一个过程宏,允许您生成围绕您函数的宏包装器,支持关键字和默认参数。
示例
在一个包中,使用此宏就像这样简单
#![feature(plugin)]
#![plugin(kwarg_macros)]
kwarg_decl! foo(a = 1, b = None, c = Some(6));
fn foo(a: i32, b: Option<i32>, c: Option<i32>) -> (i32, Option<i32>, Option<i32>)
{
(a, b, c)
}
fn main()
{
let ret = foo!(c = Some(2), b = Some(6));
assert_eq!(ret, (1, Some(6), Some(2)));
}
无法导出这些生成的宏,因此您应该提供一个重新生成它们的宏并将其导出
库
:
#[macro_export]
macro_rules! library_kwargs
{
() =>
{
kwarg_decl! foo(a = 1, b = None, c = Some(6));
}
}
pub fn foo(a: i32, b: Option<i32>, c: Option<i32>) -> (i32, Option<i32>, Option<i32>)
{
(a, b, c)
}
应用程序
:
#![feature(plugin)]
#![plugin(kwarg_macros)]
#[macro_use]
extern crate library;
library_kwargs!();
fn main()
{
use library::foo;
let ret = foo!(c = Some(2), b = Some(6));
assert_eq!(ret, (1, Some(6), Some(2)));
}
语法
一般语法如下
function_name '(' [required_arg_name | optional_arg_name '=' initializer_expr ],* ')'
例如。
kwarg_decl! function_name(req_arg1, req_arg2, opt_arg1 = 1, opt_arg2 = 2);
// ...
function_name!(1, opt_arg1 = 2, req_arg2 = 2); // `req_arg1` is set positionally, `opt_arg2` remains at default
在调用生成的宏时,位置参数必须先于可选参数。
安装
通过 Cargo
许可
LGPL 3.0