这总是迫使我们返回一个参数,以防我需要返回多个参数,比如一个列表和一个字符串。函数参数中不存在此限制。
问问题
497 次
6 回答
8
这个问题是 F#、haskell 等函数式语言试图解决的问题。问题是在硬件中,函数的返回值最初是通过 CPU 寄存器返回的,所以你只能返回一个值。C 语法继承了这一传统,C++(以及 C#、Java)也继承了这一点。
于 2009-01-23T07:03:55.097 回答
4
事实上,有些语言可以满足您的需求。例如 Python,看这段代码。它返回 2 个值:1 个字符串和另一个 int。
>>> def myFunc():
... string_val = "techmaddy"
... int_val = 10
... return string_val, int_val
...
>>>
>>> s, i = myFunc()
>>>
>>> print s
techmaddy
>>>
>>> print i
10
我希望它会有所帮助。
PS:在幕后,我猜 Python 正在将它装箱并取消装箱。我不太了解 Python,无法告诉你它到底做了什么。
于 2009-01-23T07:07:41.033 回答
4
如果您需要经常这样做,那么创建一个类来保存结果并返回它。
这也允许您以与记录参数相同的方式记录您的函数返回的内容。
于 2009-01-23T21:36:02.730 回答
3
或者,从您的方法中返回 Object[],然后执行
return new Object[] { list, string};
如果您需要更多参数化的返回类型,您可以创建 Pair<X,Y> 类或 Triplet<Z,Y,Z> 并返回它们。
于 2009-01-23T07:58:28.683 回答
1
幸运的是,Javascript 是一种动态语言。这意味着您可以构造任何类型的对象并将其返回。这有效地满足了您对具有“参数化”返回值的要求,尽管是以一种相当不安全的方式。
例如:
function stuff() {
return {
"foo": "a",
"bar": "b"
}
}
var theStuff = stuff();
alert(theStuff.foo + theStuff.bar); // should output "ab"
于 2009-01-28T08:01:38.040 回答
0
处理复杂返回行为的方法是传递方法调用的接口。例如
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);
于 2009-01-23T21:52:21.370 回答