2013-08-23 43 views
6

Tôi có một dự án lớn với hơn 40 chức năng và nó chỉ tăng mỗi ngày. Thông thường, tôi tham chiếu một hàm nhiều lần từ các tập lệnh khác nhau. Thỉnh thoảng, tôi sẽ thấy rằng tôi cần chỉnh sửa một hàm cho một tập lệnh, và sau đó tôi nhận ra rằng có thể tôi muốn hàm đó giữ nguyên cho một tập lệnh khác. Rõ ràng điều này trong chính nó là không có vấn đề; Tôi chỉ có thể viết một chức năng mới. Nhưng đôi khi tôi không nhớ nếu tôi đã tham chiếu chức năng đó ở bất kỳ nơi nào khác trong thư mục lớn hơn chứa tất cả các tập lệnh của tôi!Số lần theo dõi hàm được tham chiếu trong thư mục/tệp trong MATLAB?

Có cách nào trong MATLAB bằng cách nào đó tìm được số lần một hàm được sử dụng trong một thư mục không? Nếu vậy, có cách nào để theo dõi nơi nó được tham chiếu từ đâu không? Cảm ơn trước =).

Trả lời

6

Đối với điều này, tôi thường sử dụng số tìm các tệp funcionality (được tìm thấy trong trình đơn ở đầu màn hình của bạn) với tùy chọn 'contains'. Đặc biệt nếu tên hàm của bạn không khớp với tên biến chung thì nó hoạt động rất tốt.

Chỉ cần tìm kiếm trong toàn bộ đường dẫn MATLAB hoặc trong thư mục cụ thể cho một số nội dung như myFun( và bạn sẽ thấy tất cả các địa điểm được gọi. Trong trường hợp xấu nhất, bạn cũng sẽ tìm thấy một số nơi mà nó không được gọi.

+0

Điều này thật hoàn hảo! Tôi biết MATLAB sẽ có một cái gì đó để làm điều này, họ có giao diện người dùng khá tốt = p. Cảm ơn! – spaderdabomb

+0

+1 Hoàn toàn bỏ qua điều này. Damn bạn, giao diện người dùng mới của Matlab;) – Deve

2

Tôi không biết về bất kỳ chức năng Matlab tích hợp nào thực hiện điều này, vì vậy bạn có thể phải viết một số chức năng để thực hiện việc này cho bạn.

Bạn có thể sử dụng chức năng DIRWALK từ Matlab FileExchange để thu thập thư mục dự án và xem tất cả các tệp Matlab (sử dụng lệnh what) để tìm tên hàm của bạn.

5

MATLAB cung cấp hỗ trợ cho theo dõi phụ thuộc bằng cách sử dụng chức năng depfun. depfun cho bạn biết cần có các chức năng nào khác để chạy một hàm nhất định.

Điều bạn đang hỏi là vấn đề ngược lại: Các hàm nào yêu cầu một hàm nhất định?

Sử dụng depfun, bạn có thể thực hiện tra cứu ngược lại. Dưới đây là một ví dụ nhanh:

function result = invdepfun(allFunctions, lookFor) 
% Return all functions that depend on a given function 
% 
% Example: invdepfun({'myfun1', 'myfun2', 'myfun3'}, 'myfun4') returns all of 
% 'myfun1', 'myfun2', 'myfun3' that use 'myfun4'. 

    filename = which(lookFor); 

    result = {}; 
    for i = 1 : numel(allFunctions) 
     deps = depfun(allFunctions{i}, '-quiet'); 
     if any(strcmpi(deps, filename)) 
      result{end + 1} = allFunctions{i}; 
     end 
    end 
end 

Bạn có thể sử dụng nhiều chức năng MATLAB khác (which, dir, vv) để autmatically biên soạn một danh sách tất cả các chức năng của bạn để vượt qua để invdepfun như là đối số đầu tiên.

Xem thêm this post on File Exchange.

+0

Giống như việc đệ trình FEX, nhưng điều này cũng cho bạn biết hàm được gọi từ mỗi hàm bao nhiêu lần? –

+0

Chắc chắn hữu ích cũng như =) – spaderdabomb

+0

@DennisJaheruddin: Giải pháp của tôi sẽ chỉ cho bạn thấy những hàm nào sử dụng hàm của bạn, không phải tần suất chúng tham chiếu đến hàm đó. Theo như tôi thấy, điều này cũng giữ cho việc nộp FEX. Bạn có thể nhận được số lượng tuyệt đối các cuộc gọi thời gian chạy bằng cách sử dụng đầu ra của 'hồ sơ ('thông tin')', nhưng đó là một cái gì đó khác nhau. Tại sao bạn cần số này? –

Các vấn đề liên quan