这总是迫使我们返回一个单一的参数,以防我需要返回多个,比如一个List和一个String。这个限制在函数参数中没有。为什么函数没有参数化返回类型,因为它有参数化输入?
3
A
回答
8
这个问题是诸如F#,haskell等函数式语言试图解决的问题。问题在于,在硬件中,函数的返回值最初是通过CPU寄存器返回的,因此您只能返回一个值。在这个传统和C++(和C#,Java)上传递的C语法也继承了这一点。
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,告诉你它究竟做了什么。
3
,或者返回对象[]从你的方法,并做
如果您需要更多的参数返回类型,你可以创建对< X,Y >类或三重< Z,Y,Z >并返回这些。
4
如果您需要频繁地执行此操作,请创建一个类来保存结果并返回该结果。
这还允许您以参数记录的相同方式记录您的函数返回的内容。
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);
1
对你而言,幸运的是,Javascript是一种动态语言。这意味着您可以构建任何想要的对象并将其返回。这有效地满足了您具有“参数化”返回值的要求,尽管采用了非常安全的方式。
例如:
function stuff() {
return {
"foo": "a",
"bar": "b"
}
}
var theStuff = stuff();
alert(theStuff.foo + theStuff.bar); // should output "ab"
相关问题
- 1. 为什么scala.xml.Atom类型参数化?
- 2. 元组不能被序列化,因为它没有参数的构造函数
- 3. AuthorizationState无法序列化,因为它没有无参数的构造函数
- 4. System.Tuple不能序列化,因为它没有参数的构造函数
- 5. 无法序列化,因为它没有无参数的构造函数
- 6. C#中没有参数化类型?
- 7. 为什么不是这个prolog函数返回所有有效值? (参数没有充分实例化)
- 8. GWT @UiFactory和参数化返回类型
- 9. 实例化一个没有无参数构造函数的类型参数
- 10. 参数类型或返回类型作为参数?
- 11. Typescript:为什么没有参数的函数可以强制转换为参数
- 12. 为什么在装饰器中返回函数时没有参数。
- 13. 传递方法(void返回类型,没有输入参数)作为参数使用C#
- 14. 优化函数的参数输入
- 15. 参数化类型
- 16. 参数化类型
- 17. 为什么没有POST参数不会返回JSON
- 18. 命令行参数:函数返回类型为数组?
- 19. 为什么不检测我的参数化类的类型?
- 20. 将返回类型指定为具有泛型的函数的参数
- 21. '公共函数'没有类型参数,所以不能有类型参数。 VB.NET
- 22. 默认的类型 - 参数化函数文字类参数
- 23. 推导其参数的返回类型函数返回类型
- 24. 斯卡拉 - 使用参数化类型参数化类型
- 25. 访问参数化类型参数化类型的
- 26. 为什么ImmutableMap.builder()。build()没有选择正确的类型参数?
- 27. Liquibase addNotNullConstraint为什么没有initialDeferred参数?
- 28. 为什么collections.defaultdict的lambda没有参数?
- 29. 具有参数化类型的Apache CXF
- 30. 为什么没有返回值的Clojure函数返回nil?
你能告诉我们一些代码来描述你想要做什么? – 2009-01-23 06:58:09
如果我们想将一个List和一个String传递给一个函数,我们可以将它作为process(List,String)来完成。 如果我们想返回一个String和List,我必须创建一个String和List作为参数的对象并返回Object。 – Techmaddy 2009-01-23 07:03:30
@Techmaddy - 它的游戏在这里......我会问这个问题,然后你来回答,我会接受你的回答....天真!请不要污染。 – 2009-01-23 07:45:18