gpt4 book ai didi

scala - 在scala中传递默认参数?

转载 作者:行者123 更新时间:2023-12-01 23:18:30 25 4
gpt4 key购买 nike

请考虑下面的例子

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 - 在scala中传递默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com