我想编写一个函数来访问文件和被调用位置的行号。
I would like to write a function that accesses the file and line number of the location in which it gets called.
它看起来像这样:
fn main() { prints_calling_location(); // would print `called from line: 2` prints_calling_location(); // would print `called from line: 3` } fn prints_calling_location() { let caller_line_number = /* ??? */; println!("called from line: {}", caller_line_number); }推荐答案
RFC 2091:隐式调用者位置添加了 track_caller 功能这使功能可以访问其调用者的位置。
RFC 2091: Implicit caller location adds the track_caller feature which enables a function to access the location of its caller.
简短答案:要获取调用函数的位置,请在#[track_caller] 中进行标记,然后使用 std :: panic ::位置::呼叫者 。
Short answer: to obtain the location in which your function gets called, mark it with #[track_caller] and use std::panic::Location::caller in its body.
在该答案之后,您的示例将如下所示:
Following from that answer, your example would look like this:
#![feature(track_caller)] fn main() { prints_calling_location(); // would print `called from line: 2` prints_calling_location(); // would print `called from line: 3` } #[track_caller] fn prints_calling_location() { let caller_location = std::panic::Location::caller(); let caller_line_number = caller_location.line(); println!("called from line: {}", caller_line_number); }游乐场链接
更具体地说,函数 std :: panic :: Location :: caller 有两种行为:
More specifically, the function std::panic::Location::caller has two behaviors:
- 在一个函数内标记为#[track_caller] ,它会返回&'static Location<'static>
-
在一个没有#[track_caller] ,它具有容易出错的行为,即返回调用位置,而不是调用函数的实际位置,例如:
- Within a function marked #[track_caller], it returns a &'static Location<'static> which you can use to find out the file, line number, and column number in which your function gets called.
Within a function that doesn't have #[track_caller], it has the error-prone behavior of returning the actual location where you've invoked it, not where your function gets called, for example:
游乐场链接
更多推荐
每次调用函数时如何访问它的调用位置?
发布评论