6

好吧,我真的认为这会起作用(在方法内):

var x, y = 1;

var x = 1, y = 2;

但它没有,它不会编译 - “复合定义中不允许使用 var”。

我想这样做的原因是通常的权衡。这不是一个非常常用的功能,因此没有实现,但我们可以肯定并且可能在未来的版本中......

4

1 回答 1

15

好吧,如果你给它一个清单类型:

int x, y = 1;

这声明了两个 int 变量,并初始化其中一个。但是局部变量类型推断需要初始化器来推断类型。所以你已经死了。

但是,假设您打算为两者提供初始化程序。当两个初始值设定项具有相同类型时,该做什么是“显而易见的”。所以让我们变得更难。假设你说:

var x = 1, y = 2.0;

这是什么意思?这是否声明xasintyas float?或者它是否试图找到某种类型可以同时是 x 和 y 的类型?无论我们决定哪种方式,有些人会认为它应该以另一种方式工作,这从根本上是令人困惑的。

而且,为了什么利益?与潜在的语义混淆相比,说出你的意思所增加的句法成本是微不足道的。这就是为什么我们将其排除在本地人的类型推断范围之外的原因。

那么,你可能会说,“好吧,只有当它们是相同类型时才让它工作。” 我们可以这样做,但现在何时可以使用推理以及何时不能使用推理的界限更加复杂。无论如何,我现在会回答同样的“你为什么不”的问题……现实是推理方案总是有限制的。你要选择的是边界。最好选择干净、明确的限制(“可以在这些情况下使用它”)而不是模糊的限制。

于 2018-03-07T15:17:23.390 回答