Scala中至少有两种技术可以将默认值传递给方法
1)默认参数值
scala> def f(i: Int = 0) = i
f: (i: Int)Int
scala> f()
res0: Int = 0
scala> f(1)
res1: Int = 1
Run Code Online (Sandbox Code Playgroud)
2)隐含参数
scala> def g(implicit i: Int) = i
g: (implicit i: Int)Int
scala> implicit val default = 0
default: Int = 0
scala> g(1)
res5: Int = 1
scala> g
res7: Int = 0
Run Code Online (Sandbox Code Playgroud)
在哪种情况下你选择一个或另一个?凭借隐式的力量,默认值是一个有用的功能吗?
sen*_*nia 12
你绝对应该更喜欢默认参数值.
Int或等一般类型的隐式参数String.见下面的引文.另请参阅:Scala中的编程21.5隐式参数/隐式参数的样式规则:
作为样式规则,最好在隐式参数的类型中使用自定义命名类型.
其他答案很有趣,它们提出了有效点,暗示了编译时间变慢和代码更复杂.
但是,我认为重要的是要理解,从某种意义上说,隐含和默认是互补的:
当然,库可能会提供其函数将使用的含义 - 您在Scala库中始终使用implicits而不必定义它们,对吧?
但是,当使用implicits时,调用者总是可以指定要使用的不同"默认值".
在任何一种情况下,都可以在调用函数时显式传递该值.
另一个小的区别是,可以选择通过命名参数覆盖哪些默认值,但如果您选择显式传递一个默认值,则必须传递所有默认值.
最后,请注意您可以同时使用隐式和默认.