Rust 讀取函數名的調研

文檔列表見:Rust 移動端跨平臺複雜圖形渲染項目開發系列總結(目錄) git

沒這個功能很不方便日誌記錄。github

RFC: Add "function name macro" 四年前提出經過 function!提供相似C/C++編譯器提供的__func__宏定義同樣的功能,目前已合併,但還不可用。post

Equivalent of func or FUNCTION in Rust? 提供了一個臨時解決辦法:ui

#![feature(core_intrinsics)]

macro_rules! function {
    () => {{
        fn f() {}
        fn type_name_of<T>(_: T) -> &'static str {
            extern crate core;
            unsafe { core::intrinsics::type_name::<T>() }
        }
        let name = type_name_of(f);
        &name[6..name.len() - 4]
    }}
}

pub fn main() {
    (|| {
        mod module {
            pub trait Trait {
                fn function(&self) {
                    println!("{} (in {} [{}:{}:{}])",
                        function!(), module_path!(), file!(), line!(), column!()
                    );
                }
            }
            impl Trait for () {}
        }
        module::Trait::function(&());
    })()
}
複製代碼
相關文章
相關標籤/搜索