#reference #mutable #self #mut #generate #fn

nightly macro fn_mut

fn_mut 宏生成一个函数,该函数接收对 self 的可变引用并返回可变引用

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年3月11日

#47#fn

MIT 许可证

10KB
201 行(不包括注释)

fn_mut 宏

Build Status

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