【发布时间】:2014-04-10 16:22:10
【问题描述】:
很多静态类型语言,如 C++ 和 C#,都有局部变量类型推断(我认为分别使用关键字 auto 和 var)。
但是,我还没有看到很多 C 派生语言(除了 cmets 中提到的那些)实现编译时 返回类型 推断。在我提出问题之前,我将描述“返回类型推断”的含义。 (我绝对不是指按返回类型重载。)
以一种假设的类 C# 语言考虑这段代码:
private auto SomeMethod(int x)
{
return 3 * x;
}
返回类型是int(编译器可以验证)这一点非常明显(对人类和编译器而言)。
多路径也是如此:
private auto SomeOtherMethod(int x)
{
if(x == 0) return 1;
else return 3 * x;
}
这仍然完全没有歧义,因为在上述语言中已经有一种算法来解决两个表达式是否具有兼容的类型:
private auto YetAnotherMethod(int x)
{
var r = (x == 0) ? 1 : 3 * x;
return r;
}
由于该算法存在并且已经以某种形式实现,因此在这方面可能不是技术问题。但是,我还没有在静态类型语言的任何地方看到它,这让我开始思考它是否有什么不好的地方。
我的问题:
- 作为一个概念,返回类型推断是否有任何缺点或我没有看到的微妙陷阱? (除了可读性——我已经明白了。)
- 是否存在一些极端情况,它会给静态类型语言带来问题或歧义?(我所说的“介绍”指的是 局部变量 类型推断不存在的问题'还没有。)
【问题讨论】:
-
D 编程语言支持返回类型推断,效果很好。
-
Eric Lippert 很想回答这个问题..寻找他关于这个主题的现有答案。
-
所以,我想以后会在C#中加入它
标签: language-agnostic type-inference