2011-12-14 27 views
5

Tôi có thể tìm thấy tên của hàm hiện tại mà tôi đang thực hiện khi chạy không?Erlang - Cách tìm tên của hàm hiện tại trong thời gian chạy?

foo() -> 
    foo = find_function_name(). 

Có thể viết niềm vui find_function_name/0 không? Bạn sẽ làm như thế nào? Nó đã tồn tại chưa?

+5

có thể trùng lặp của [Làm cách nào để lấy tên hàm?] (Http://stackoverflow.com/questions/4915339/how- -tên-hàm-của-một-chức năng) –

Trả lời

3

nhẹ hơn và cũng không phụ thuộc vào định dạng stacktrace mà có thể thay đổi đôi khi, tôi muốn sử dụng process_info/2:

{_, {Module, Function, Arity}} = process_info(self(), current_function) 

Trong Function bạn sẽ tìm thấy tên hàm như một nguyên tử và bạn sẽ có được Module và số Arity cũng vậy. Bạn không thể viết hàm này làm hàm vì nó sẽ trả về hàm này như hiện tại. Macro cung cấp cho bạn tên hàm hiện tại làm nguyên tử có thể trông giống như:

-define(current_function_name(), 
      element(2, element(2, process_info(self(), current_function)))). 

foo() -> 
    foo = ?current_function_name(). 
Các vấn đề liên quan