Scala 咖喱函数根据条件执行任何表达式

Scala curried function to execute any expression on condition

我正在尝试创建一个函数来检查条件是否适用,如果适用则运行任何可能的表达式,以防条件不应用此函数 returns 默认值, 我可以通过以下方式做到这一点:

def executeOnCondition[T](condition: Boolean, default: T)(f: => T): T = if (condition) f else default

但是我希望这个函数被柯里化,这样它首先接受条件和默认值,然后才执行表达式。 想象中的用途:

val useLater = executeOnCondition(true, 3.14)
// do stuff
useLater { 3.14 * 2}

但是当我尝试以预期的方式创建我的柯里化函数时:

def executeOnCondition[T](condition: Boolean, default: T) = (f: => T) => { if (condition) f else default }

我得到这个编译错误:

identifier expected but '=>' found.

我猜这个问题与泛型的使用有关, 任何人都可以阐明一些问题并提供解决方法吗?

非常感谢

这是正确的语法:

def executeOnCondition[T](condition: Boolean, default: T): (=> T) => T =
  block => if (condition) block else default

出于某种原因 (错误?) 您不能键入 => T 作为 lambda 输入的类型,即使该类型是有效的。