scala之在scala中传递默认参数

哈哈 阅读:101 2025-06-02 22:19:02 评论:0

请考虑下面的例子

def foo(a: Int, b: Int = 100) = a + b 
def bar(a: Int, b: Int = 100) = foo(a, b) * 2 

这可行,但请注意,我必须在两个函数中为 b 提供相同的默认值。我的意图其实是下面的

def bar(a: Int, b: Int) = foo(a, b) * 2 
def bar(a: Int)    = foo(a) * 2 

但是当您有更多可选参数和链中的其他函数(例如以相同方式调用 bar 的 baz)时,这会变得很麻烦。在 scala 中有没有更简洁的表达方式?

请您参考如下方法:

我认为没有;如果您使用加倍函数编写 foo:

val bar = (foo _).curried((_: Int)) andThen ((_: Int) *2) 
// (please, please let there be a simpler way to do this...) 

你丢失了默认参数,因为函数对象 don't have them .

如果在您的用例中值得这样做,您可以创建一个案例类,其中包含您传递的参数,而不是多个单独的参数,例如

case class Args(a: Int, b: Int = 100, c: Int = 42, d: Int = 69) 
def foo(args: Args) = { import args._; a + b + c + d } 
def bar(args: Args) = foo(args) * 2 


标签:Scala
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号