Warum Funktionen nicht haben Rückgabetypen parametriert, wie es Eingang parametriert?

StackOverflow https://stackoverflow.com/questions/472129

  •  19-08-2019
  •  | 
  •  

Frage

Dies ist immer zwingt uns einen einzigen Parameter, falls kehrt ich mehr zurückkommen muß, sagt eine Liste und einen String. Diese Einschränkung ist nicht da in Funktionsargumenten.

War es hilfreich?

Lösung

Dieses Problem ist das, was funktionale Sprachen wie F #, Haskell usw. versuchen, zu adressieren. Das Problem ist, dass in Hardware, eine Rückgabewert der Funktion wurde ursprünglich über ein CPU-Register zurückgegeben, so kann man nur einen einzigen Wert zurückgeben. C-Syntax auf dieses Erbe und C ++ übergeben (und C #, Java) auch diese vererbt.

Andere Tipps

Wenn Sie dies häufig genug tun müssen, dann eine Klasse erstellen, nur um das Ergebnis zu halten und zurück, dass statt.

Auf diese Weise können Sie auch dokumentieren, was Ihre Funktion in der gleichen Art und Weise gibt, dass die Parameter dokumentiert sind.

In der Tat haben einige Sprachen, was Sie genau wollen. Zum Beispiel Python, suchen Sie diesen Code an. Es gibt zwei Werte:. 1 String und andere int

>>> def myFunc():
...   string_val = "techmaddy"
...   int_val = 10
...   return string_val, int_val
...
>>>
>>> s, i = myFunc()
>>>
>>> print s
techmaddy
>>>
>>> print i
10

Ich hoffe, dass es helfen würde.

PS: Unter den Abdeckungen, ich denke, Python in einer Liste ist Boxen und un-Boxen es. Ich weiß nicht Python wissen, dass gut zu sagen, was genau es funktioniert.

oder Rückkehr Object [] aus dem Verfahren, und zu tun

return new Object[] { list, string};

Wenn Sie mehr parametrisierte Rückgabetypen benötigen, könnten Sie Pair Klassen oder Triplet erstellen und zurück diejenigen.

Javascript, zum Glück für Sie, ist eine dynamische Sprache. Dies bedeutet, dass Sie jede Art von Objekt erstellen können Sie es wollen und zurück. Dies trifft effektiv Ihre Anforderung einen „parametrisiert“ Rückgabewert hat, wenn auch in eher un-typsichere Art und Weise.

Zum Beispiel:

function stuff() {
    return {
        "foo": "a",
        "bar": "b"
    }
}

var theStuff = stuff();
alert(theStuff.foo + theStuff.bar); // should output "ab"

Ein Weg, um komplexe Rückkehr Verhalten zu handhaben ist eine Schnittstelle zu übergeben, das die Methode aufruft. z.

public interface Results<R> {
    public void processing(String stage);
    public void success(String mesg, R result);
    public void successes(String mesg, List<R> result);
    public void thrown(Throwable t);
}

public void process(Results<R> results, String text, List<String> data);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top