假设我想分配一个匿名函数,它将一个映射Int
到一个Int
我可以这样分配
val double = (x: Int) => x * 2
或者像这样
val double: Int => Int = x => x * 2
哪个更惯用?或者是否有一种情况比另一种更可取?
假设我想分配一个匿名函数,它将一个映射Int
到一个Int
我可以这样分配
val double = (x: Int) => x * 2
或者像这样
val double: Int => Int = x => x * 2
哪个更惯用?或者是否有一种情况比另一种更可取?
我会调用它两次,因为它double
是 Java 中的保留字,可能会导致与数据类型混淆Double
(即double
在 Java 中)。无论如何,两者都没有比另一个更惯用。在其他条件相同的情况下,我更喜欢第一种形式,因为它更短,并且如果我决定x
应该是 a Float
(即我只需要在一个地方更改类型),它会自动为我修复我的类型。如果我认为它是一个重要但不明显的Int => Int
,或者如果情况更复杂并且需要该信息来进行正确的类型推断,我会赞成第二个。实际上,在这种简单的情况下,我会将案例写为
val twice = (x: Int) => x * 2
val twice: Int => Int = _ * 2
这使它们的长度相同。(我仍然喜欢第一个,因为它不再是,并且在您需要多次引用变量的情况下,您可以保持相同的形式。)
我会说这取决于你同事的背景。
第二个在我看来更像 Haskellish,第一个更像 Javaish。
此外,第二个实际上指定了返回类型,当 double 是公共 API 的一部分时这是一个很好的做法,而第一个只是推断它,当实现发生更改时容易发生意外更改。