2013-04-11 14 views
5

enter image description here"MATLAB yolunda gölgeler" ne anlama geliyor? Bir dosyada nasıl yapılır?

Bunu her zaman unitTester dosyasını çalıştırmadan önce yapmalıyım. Bunun neden gerekli olduğunu anlayamıyorum. Ne anlama geliyor? Ve neden "Add to Path > Selected Folders and Subfolders" yeterli değil?

[Güncelleme]Bu here sorun olabilir. Çekirdek, dosya adlarının aynı olduğu farklı tekniklerde programlanır. Her durumda sadece belirli dosyaların kullanıldığından emin olmalıyım. En kolay yol, ad alanlarını dağıtmamak için bir paket kullanıyor mu?

+0

[this] (http://www.mathworks.se/matlabcentral/newsreader/view_thread/254911) ve [this] işaretleyin (http://compgroups.net/comp.soft-sys.matlab/files-shadowing-themselves -case-of-direc/866751) tartışma. Bu hatayı da gördüm ama çözmek için ne yaptığımı hatırlamıyorum. Belki de kodun içindeki yolu programlı olarak değiştirebilirsiniz. Veya dosyanın hangi dizinden çalıştığını kontrol edin 'hangi' –

+0

Güncellemenizle ilgili olarak: Hata mesajı, test komut dosyalarının adları ile aynı görünmektedir. Yani önce düzeltmen gereken bir şey.Daha sonra, çekirdeğiniz için adlandırma şemasının benzer sorunlar yaratıp yaratmadığını kontrol etmeniz gerekir. –

cevap

5

MATLAB arama yolunda m-dosyaları arar, path komutunu kullanarak görüntüleyebilirsiniz. Eğer MATLAB yolunda aynı basename (yani, dizinden hariç dosya isminin bir kısmı) ile birden fazla m-dosyanız varsa, MATLAB sadece yol üzerinde ilk geleni çalıştırabilir.

Yolu dinamik olarak değiştirmek için addpath ve rmpath işlevlerini kullanabilirsiniz. Örneğin, test dizininizde otomatik olarak ilgili dizinleri otomatik olarak ekleyebilirsiniz. addpath'un yol listesinin başına yeni bir yol eklediğini unutmayın, bu da varolan girdilerden öncelikli olduğundan emin olur.

Bu gibi ad çakışmaları engellemenin başka bir yolu packages.

DÜZENLEME: aşağıdakileri yapın, paketin içine bir dizin dönüştürmek için:

  • Adının başında + ekleyin.
  • Yönetmenin ebeveynini MATLAB yoluna koyduğunuzdan emin olun.
  • Paket içindeki tüm çağrıları onlara ya packagename. kodunu hazırlayarak ya da aramalardan önce paket içeriğini ekleyerek güncelleyin (import packagename.*).

Genellikle, paketleri daha kolay kullanmaları nedeniyle dinamik yol değişikliklerine tercih ederim. Paketleri yuvalayabileceğinizi unutmayın (ör. my_matlab_files/+mypkg/+nested/foo.m).

+0

nasıl pakete farklı çekirdekleri [buradan] (http://i.stack.imgur.com/VKPjM.png) yapmak için bir örnek gösterebilir misiniz? Bu özel durum addpath/rmpath ile nasıl çalışır? Artılar ve eksiler? Liste listesi bir çekirdek ve sct bir çekirdek. Ben farklı uygulamaları test ediyorum ve ben daha kolay şeyler umarım, yine de kullanmak için yapım bir paketle onların ad alanlarını ayırmak için akıllı bir fikir olduğunu düşünüyorum. İlk fikir hxcking gibi geliyor ama muhtemelen daha hızlı. – hhh

+0

@hhh: cevabımı güncelledik. –

+3

yolu MATLAB fonksiyonları arar tek yer değildir. Ayrıca MATLAB'ın ilk tercihi olmayabilir. Özellikle olur herhangi bir işlev yerde MATLAB yolundaki aynı adı herhangi fonksiyonu dışında geçerli çalışma dizini bloklar halinde olmak. Daha kesin bilgi için http://www.mathworks.de/de/help/matlab/matlab_prog/function-precedence-order.html bkz – Alex

0

Aynı sorunun OS X 10.10.3 ile Matlab r2015a ile karşılaştım.

ancak sorunu küçük harfe nasılsa son klasörü yeniden adlandırma

~/electrochemistry/Matlab/ benim dosyaları vardı. giderme sırasında ben Matlab ~/electrochemistry/matlab/ bakıyordu fark, ama yüzden şimdi ~/electrochemistry/matlab/ çalışıyorum ve problem

çözüldü (yani benim .m dosya Koşuyordum)

aradığı şeyi bulamadı