2013-04-11 27 views
5

enter image description here"Bóng tối trong đường dẫn MATLAB" nghĩa là gì? Làm thế nào để làm điều đó trong một tập tin?

Tôi cần thực hiện việc này trước khi chạy tệp tin UnitTester. Tôi không thể hiểu tại sao điều này là bắt buộc. Điều đó có nghĩa là gì? Và tại sao "Add to Path > Selected Folders and Subfolders" không đủ?

[Cập nhật]Điều này here có thể là vấn đề. Hạt nhân được lập trình trong các kỹ thuật khác nhau, nơi tên tập tin giống nhau. Tôi cần đảm bảo chỉ một số tệp nhất định được sử dụng trong mỗi trường hợp. Cách dễ nhất có sử dụng ở đây một gói không làm lộn xộn không gian tên?

+0

Kiểm tra [this] (http://www.mathworks.se/matlabcentral/newsreader/view_thread/254911) và [this] (http://compgroups.net/comp.soft-sys.matlab/files-shadowing-themselves -case-of-direc/866751) thảo luận. Tôi cũng đã gặp lỗi này nhưng tôi không nhớ những gì tôi đã làm để giải quyết nó. Có lẽ bạn có thể lập trình thay đổi đường dẫn bên trong mã. Hoặc kiểm tra từ thư mục mà tệp đang chạy bằng cách nhập 'which' –

+0

Về cập nhật của bạn: Thông báo lỗi là về tên của các tập lệnh thử nghiệm có vẻ giống nhau. Vì vậy, đó là một cái gì đó bạn cần phải sửa chữa đầu tiên.Sau đó, bạn cần kiểm tra xem lược đồ đặt tên của bạn cho các hạt nhân có đưa ra các vấn đề tương tự hay không. –

Trả lời

5

MATLAB tìm kiếm các tệp m trên đường dẫn tìm kiếm, bạn có thể hiển thị nó bằng cách sử dụng lệnh path. Nếu bạn có nhiều tệp m với cùng tên cơ sở (tức là phần tên tệp trước phần mở rộng, loại trừ các thư mục) trên đường dẫn MATLAB thì MATLAB chỉ có thể thực thi một tệp đến trước trên đường dẫn.

Bạn có thể sử dụng các chức năng addpathrmpath để tự động sửa đổi đường dẫn. Ví dụ: bạn có thể tự động thêm các thư mục có liên quan tự động vào tập lệnh chạy thử nghiệm của mình. Lưu ý rằng addpath thêm đường dẫn mới vào đầu danh sách đường dẫn, đảm bảo rằng đường dẫn này được ưu tiên hơn các mục nhập hiện tại.

Một cách khác để ngăn xung đột tên như thế này là packages.

EDIT: Để chuyển đổi một thư mục vào một gói, làm như sau:

  • Thêm một + vào đầu tên của nó.
  • Đảm bảo bạn đặt cha mẹ của thư mục lên đường dẫn MATLAB.
  • Cập nhật tất cả các cuộc gọi đến các chức năng trong gói bằng cách thêm packagename. cho chúng hoặc bằng cách bao gồm nội dung gói trước cuộc gọi (import packagename.*).

Nói chung tôi muốn các gói để sửa đổi đường dẫn động hơn, vì chúng dễ sử dụng hơn. Lưu ý rằng bạn có thể lồng các gói (ví dụ: my_matlab_files/+mypkg/+nested/foo.m).

+0

Bạn có thể trình bày ví dụ về cách tạo các hạt nhân khác nhau [ở đây] (http://i.stack.imgur.com/VKPjM.png) thành các gói không? Làm thế nào trường hợp cụ thể này sẽ làm việc với addpath/rmpath? Ưu điểm/khuyết điểm? Listlist là một hạt nhân và sct là một hạt nhân. Tôi đang thử nghiệm các triển khai khác nhau và tôi nghĩ rằng đó là một ý tưởng thông minh để tách các không gian tên của họ bằng một gói, làm cho mọi thứ dễ sử dụng hơn, hy vọng. Ý tưởng đầu tiên có vẻ hơi giống hxcking ... nhưng có lẽ nhanh hơn. – hhh

+0

@hhh: Tôi đã cập nhật câu trả lời của mình. –

+3

Đường dẫn không phải là nơi duy nhất mà MATLAB tìm kiếm các hàm. Ngoài ra, nó có thể không phải là lựa chọn đầu tiên của MATLAB. Đặc biệt, bất kỳ hàm nào xảy ra trong thư mục làm việc hiện tại của bạn sẽ chặn bất kỳ hàm nào có cùng tên ở bất kỳ đâu trên đường dẫn MATLAB. Để biết chi tiết cụ thể, hãy xem http://www.mathworks.de/de/help/matlab/matlab_prog/function-precedence-order.html – Alex

0

Tôi gặp phải sự cố tương tự trên OS X 10.10.3 với Matlab r2015a.

Tôi có tập tin của tôi trong ~/electrochemistry/Matlab/

Bằng cách nào đó đổi tên thư mục cuối cùng để chữ thường giải quyết vấn đề. Trong khi xử lý sự cố, tôi nhận thấy Matlab đang tìm kiếm trong ~/electrochemistry/matlab/, nhưng không thể tìm thấy những gì nó đang tìm kiếm (ví dụ của tôi .m file tôi đã chạy)

Vì vậy, bây giờ tôi đang làm việc tại ~/electrochemistry/matlab/ và vấn đề được giải quyết

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