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日

#2205Rust 模式

LGPL-3.0

14KB
309

包含 (ELF exe/lib, 20KB) 测试,(ELF exe/lib, 20KB)

Rust 的关键字参数

Build Status

这个包提供了一个过程宏,允许您生成围绕您函数的宏包装器,支持关键字和默认参数。

示例

在一个包中,使用此宏就像这样简单

#![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

没有运行时依赖