1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年3月11日 |
---|
#47 在 #fn
10KB
201 行(不包括注释)
fn_mut 宏
fn_mut
宏生成一个函数,该函数接收对 self 的可变引用并返回可变引用。
#[fn_mut(disable_self, disable_output, enable_attrs = "attr1,attr2,...")]
fn(attr1: &T1, attr2: &T2, ...) -> OutT { ... }
lib.rs
:
用法
#[fn_mut(disable_self, disable_output, enable_attrs = "attr1,attr2,...")]
fn(attr1: T1, attr2: T2, ...) -> OutT { ... }
默认情况下,fn_mut
宏会生成一个函数,该函数接收对 self 的可变引用并返回可变引用,如果原始函数中有任何引用。
可能选项包括
disable_self
:不将&self
改为&mut self
disable_output
:不更改输出值enable_attrs = "attr1,attr2,..."
:在属性中更改可变性
需要 nightly 编译器和 #![feature(proc_macro)]
。
示例
#![feature(proc_macro)]
extern crate fn_mut;
use fn_mut::fn_mut;
struct Test(u64);
impl Test {
#[fn_mut(enable_attrs = "text")]
fn test(&self, text: &str) -> Option<&u64> {
if_mut! {
println!("This is mut fn: {}", text);
}
if_const! {
println!("This is const fn: {}", text);
}
Some(ptr!(self.0))
}
}
此示例展开为
struct Test(u64);
impl Test {
fn test(&self, text: &str) -> Option<&u64> {
println!("This is const fn: {}", text);
Some(&self.0)
}
fn test_mut(&mut self, text: &mut str) -> Option<&mut u64> {
println!("This is mut fn: {}", text);
Some(&mut self.0)
}
}
依赖关系
~5MB
~112K SLoC