por que funções não têm parametrizados tipos de retorno, já que tem entrada parametrizada?
-
19-08-2019 - |
Pergunta
Isso sempre nos força para retornar um único parâmetro no caso de eu precisar retornar múltipla, dizer uma lista e uma String. Esta restrição não é lá em argumentos da função.
Solução
Este problema é o que linguagens funcionais como F #, Haskell etc. tentar endereço. O problema é que em hardware, valor de retorno de uma função foi originalmente retornou através de um registo CPU, assim você só poderia retornar um único valor. C sintaxe passou este legado e C ++ (e C #, Java) também herdou isso.
Outras dicas
Se você precisa fazer isso com freqüência suficiente, em seguida, criar uma classe apenas para segurar o resultado e voltar que em vez.
Isso também permite que você documentar o que seus função retorna da mesma forma que os parâmetros são documentados.
Na verdade, algumas linguagens de fazer o que você quer exatamente. Por exemplo Python, olhar para este código. Ele retorna 2 valores:. 1 string e outro int
>>> def myFunc():
... string_val = "techmaddy"
... int_val = 10
... return string_val, int_val
...
>>>
>>> s, i = myFunc()
>>>
>>> print s
techmaddy
>>>
>>> print i
10
Eu espero que ele iria ajudar.
PS: Nos bastidores, eu acho que Python é o boxe-lo em uma lista e un boxe-lo. Eu não sei Python que bem lhe dizer o que exatamente ele faz.
ou, o retorno Object [] a partir do seu método, e fazer
return new Object[] { list, string};
Se precisar de tipos de retorno mais parametrizadas, você pode criar pares
Javascript, felizmente para você, é uma linguagem dinâmica. Isto significa que você pode construir qualquer tipo de objeto que você deseja e devolvê-lo. Isso atende efetivamente sua exigência de ter um "parametrizados" valor de retorno, ainda que de forma bastante un-typesafe.
Por exemplo:
function stuff() {
return {
"foo": "a",
"bar": "b"
}
}
var theStuff = stuff();
alert(theStuff.foo + theStuff.bar); // should output "ab"
Em forma de lidar com o comportamento de retorno complexo é passar uma interface que as chamadas de método. por exemplo.
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);