2016-03-31 12 views
1

Ich habe eine Funktion dieser FormNicht genügend Eingabeargumente in Funktion

function [g] = g(i,j) 
    k=1; 

    if i==0 
     g=0; 
    elseif i==k 
     g=j; 
    end 

Und ich will nicht die zweite Zeile im Code. Stattdessen möchte ich, dass die Funktion k aus dem Hauptprogramm liest. Ich will nicht

function [g] = g(i,j,k) 

statt schreiben, denn auf diese Weise werde ich g als Funktion von i zu schreiben, j und k in dem Code des Hauptprogrammes. Gibt es eine andere Art und Weise ?

+0

der ganze Grund für Ihre Funktion mit 'g (i, j, k)' Aufruf ist, so dass Sie wissen, was Ihre Eingaben an die Funktion sind und jetzt willst du das vermeiden? Welchen guten Grund hast du? Die Alternative ist, wie du k im Hauptprogramm in die Funktion bekommen hast, damit es k neu berechnen kann. – GameOfThrows

+0

@GameOfThrows es macht wahrscheinlich mehr Sinn, 'k' im Hauptprogramm zu definieren und die Funktion allgemein zu halten, aber es kann immer noch mühsam sein, es jedes Mal aufzurufen. Ich gehe davon aus, dass es hier oft aufgerufen wird, aber ansonsten ist das Hinzufügen eines zusätzlichen ', k' kaum etwas, dem man ausweichen kann. – Dan

+0

@Dan hast du Recht, deine Antwort ist eine Alternative, aber ich sehe wirklich nicht, wie dies weniger Arbeit ist, als ein ', k' zum Funktionsaufruf hinzuzufügen, ich meine, ich würde nur einen Ersatz verwenden, aber ich denke, es spart Speicherplatz und ein Byte ist ein Byte und es ist eine gute Alternative, unabhängig. – GameOfThrows

Antwort

3

Sie können eine anonyme Funktion verwenden, um eine closure zu erstellen. Definieren Sie Ihre Funktion als

function [g] = g(i,j,k) 
    if i==0 
     g=0; 
    elseif i==k 
     g=j; 
    end 
end 

Und dann in Ihrem Haupt-Skript, das Sie so etwas wie

k=1; 
g2 = @(i,j)g(i,j,k); 

tun können, und jetzt können Sie g2 die Art und Weise rufen Sie g vor dem Aufruf wurden aber k wird 1 sein und es wird in Ihrem Hauptskript anstatt in Ihrer Funktion definiert werden.

Oder Sie könnten sogar k komplett überspringen und definieren:

g1 = @(i,j)g(i,j,1) 
+0

vielen Dank! hat perfekt funktioniert. genau was ich brauchte. – ourania

Verwandte Themen