Scala curried 函数在条件下执行任何表达式
Posted
技术标签:
【中文标题】Scala curried 函数在条件下执行任何表达式【英文标题】:Scala curried function to execute any expression on condition 【发布时间】:2022-01-24 01:42:24 【问题描述】:我正在尝试创建一个函数来检查条件是否适用,如果适用则运行任何可能的表达式,以防条件不适用此函数返回默认值, 我可以通过以下方式做到这一点:
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.
我猜这个问题与泛型的使用有关, 任何人都可以阐明一些问题并提供解决方法吗?
非常感谢
【问题讨论】:
【参考方案1】:这是正确的语法:
def executeOnCondition[T](condition: Boolean, default: T): (=> T) => T =
block => if (condition) block else default
出于某种原因(错误?)你不能输入 => T
作为 lambda 输入的类型,即使该类型是有效的。
【讨论】:
按名称作为类型参数在理论上是被禁止的,但我能够解决它,请在另一个问题 (***.com/questions/52043365/…) 中查看我的答案。 太棒了,谢谢!以上是关于Scala curried 函数在条件下执行任何表达式的主要内容,如果未能解决你的问题,请参考以下文章