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



