1

假设我想分配一个匿名函数,它将一个映射Int到一个Int

我可以这样分配

val double = (x: Int) => x * 2

或者像这样

val double: Int => Int = x => x * 2

哪个更惯用?或者是否有一种情况比另一种更可取?

4

2 回答 2

4

我会调用它两次,因为它double是 Java 中的保留字,可能会导致与数据类型混淆Double(即double在 Java 中)。无论如何,两者都没有比另一个更惯用。在其他条件相同的情况下,我更喜欢第一种形式,因为它更短,并且如果我决定x应该是 a Float(即我只需要在一个地方更改类型),它会自动为我修复我的类型。如果我认为它是一个重要但不明显的Int => Int,或者如果情况更复杂并且需要该信息来进行正确的类型推断,我会赞成第二个。实际上,在这种简单的情况下,我会将案例写为

val twice = (x: Int) => x * 2
val twice: Int => Int = _ * 2

这使它们的长度相同。(我仍然喜欢第一个,因为它不再是,并且在您需要多次引用变量的情况下,您可以保持相同的形式。)

于 2012-10-03T18:01:08.113 回答
1

我会说这取决于你同事的背景。

第二个在我看来更像 Haskellish,第一个更像 Javaish。

此外,第二个实际上指定了返回类型,当 double 是公共 API 的一部分时这是一个很好的做法,而第一个只是推断它,当实现发生更改时容易发生意外更改。

于 2012-10-03T17:40:17.103 回答