I bir işlevMatlab: bir fonksiyonu ikinci dönen değeri alıcı bir işlev kolu oluşturan
f = @(c)foo(c)
, örneğin kullanılacak olan kolu düşünürsek bir işlev foo
[a b] = foo(c).
olarak tanımlanan olduğunu varsayalım Bir cellfun
çağrısında, ne olsun yani
a = foo(c)
gibi tanımlanmış bir foo
için eşit davranıyor bir f
olduğunu döndürülen değer b
kaybolur. Böyle bir f
bir cellfun
çağrı konduğunda
nedenle, çıkış hücresi sadece a
s olacak ve (Şu anda umurumda) b
s özleyeceğim. Görme
cellfun(f,input)
[a(input{1})] ?
[a(input{2})] ?
.... b gets killed along the way
Soru: nasıl foo
hangi yakalar sadece b
ler bir fonksiyon kolu tanımlamak için? yania
s israf
b = foo(c)
örneğin,^2, gibi foo
bir tanımı benzer bir davranış veren.
Ayrıca, mümkündür (verimli) bir benzersizcellfun
çağrısında hem a
ve b
yakalamak? Kaynaktan
Güzel n'inci çıkışını döndüren bir kolu oluşturabilir; Benim durumumda [A, B] ve '[~, B]' değil, matlab versiyonum desteklemiyor. Yani ikinci noktaya başarıyla cevap verildi! Bir lambda tanımında ikinci döndürülen argümanı almanın genel problemini hala görebiliyorum. Öyle değil mi? – Acorbe
@Acorbe Güncellenmiş yanıtlara bakın. Tam olarak aynıdır - bir işlevin bildirimini değiştiremezsiniz, ancak anonim işlev çağrınıza birden çok çıktı belirtebilirsiniz. – angainor
Ben de görüyorum .. Hala [A, B] = foo 'şeyler yapmak gerekmez bir şey arıyorum. Özellikle retro uyumluluk sorunları için. Gerçekten de, bir fob'u başka bir fonksiyonda (non-function tutamacı), lambda aromasını kaybetmek de olabilir. Dikkatlice okumamış olduğum kılavuzun bir kısmını vurguladığınız için teşekkür ederiz. – Acorbe