gpt4 book ai didi

scala - 当给出所有参数时如何不应用函数

转载 作者:行者123 更新时间:2023-12-01 19:03:36 24 4
gpt4 key购买 nike

给出以下场景:

def add(a: Int, b: Int): Int = a + b
def f1(adder: () => Int) = adder()

f1(add(1,2) _) // Does **NOT** compile, because add seems to be already executed
f1(() => add(1,2)) // This works, but seems to be ugly

有什么办法让它与下划线一起工作吗?

最佳答案

您可以通过使用按名称参数使其在没有下划线的情况下工作:

scala> def f2(adder: => Int) = adder
f2: (adder: => Int)Int

scala> f2(add(1,2))
res0: Int = 3

第三行的问题是 f1 需要一个使用空参数调用的函数。通过名称参数,您可以传入产生给定类型的任意表达式,并且在您在方法主体中使用它之前不会对其进行求值。如果您想在方法体内的多个位置使用按名称参数,但不希望重新计算它,则可以通过将其分配给lazy val来缓存它。

关于scala - 当给出所有参数时如何不应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891613/

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