scala - 如何将一个 lambda 表达式对象分配给另一个?
问题描述
我有这种代码,我想在某个对象中存储一个 lambda 表达式。
var opSpecBoolVal = false
val equalCheck = (x: Int, y: Int) => x == y
val greaterthanCheck = (x: Int, y: Int) => x > y
val lessthanCheck = (x: Int, y: Int) => x < y
val notEqualCheck = (x: Int, y: Int) => x != y
operatorType match {
case "_equal" => opSpecBoolVal = false; exitCheck = equalCheck;
case "_greaterthan" => opSpecBoolVal = true; exitCheck = greaterthanCheck;
case "_lessthan" => opSpecBoolVal = false; exitCheck = lessthanCheck;
case "_notequal" => opSpecBoolVal = true; exitCheck = notEqualCheck;
}
exitCheck(10, 20)
代码检查operatorType
字符串,如果它与任何模式匹配,则将其设置opSpecBoolVal
为某个值 true 或 false,并将一个 lambda 表达式分配给另一个对象,这就是我发现将 lambda 对象分配给其他对象的困难之处。主要座右铭是不让其余代码知道operatorType
字符串包含什么,并exitCheck
通过传递两个参数直接使用并获得布尔结果。
我已经研究过一种解决方案,其中我只有exitCheck
部分工作但无法设置opSpecBoolVal
为真或假。这是部分有效的代码。
val exitCheck = operatorType match {
case "_equal" => equalCheck;
case "_greaterthan" => greaterthanCheck;
case "_lessthan" => lessthanCheck;
case "_notequal" => notEqualCheck;
}
我想同时设置opSpecBoolVal
为真或假。
解决方案
尝试
val exitCheck: (Int, Int) => Boolean = operatorType match {
case "_equal" =>
opSpecBoolVal = false
_ == _
case "_greaterthan" =>
opSpecBoolVal = true
_ > _
case "_lessthan" =>
opSpecBoolVal = false
_ < _
case "_notequal" =>
opSpecBoolVal = true
_ != _
}
哪个输出
val operatorType = "_greaterthan"
exitCheck(10, 20) // res0: Boolean = false
为避免设置var opSpecBoolVal
为副作用,请尝试像这样的替代纯实现
type OperatorType = String
type Operator = (Int, Int) => Boolean
type IsSpecialOp = Boolean
val toOp: OperatorType => (Operator, IsSpecialOp) =
{
case "_equal" => (_ == _, false)
case "_greaterthan" => (_ > _, true)
case "_lessthan" => (_ < _, false)
case "_notequal" => (_ != _, true)
}
哪个输出
val (exitCheck, opSpecBoolVal) = toOp("_greaterthan")
exitCheck(10, 20) // res0: Boolean = false
opSpecBoolVal // res1: IsSpecialOp = true
推荐阅读
- reactjs - 是否可以在 antd image.preview 组内插入视频
- plotly - 您如何根据 Plotly 上的标题将色阶居中?
- gnome - libsecret 中的 gnome_keyring_unlock_sync 等效项,用于解锁 gnome 密钥环?
- mongodb - MongoDB C 驱动程序在安装时给出关于 OpenSSL 的奇怪错误
- python-3.x - 如何使用 xlsxwriter 在格式方法中使用字符串值
- python - itertools.groupby 的反面?
- python - 如何比较数据框行的特定条件?
- javascript - 我们可以在 Shopify 上添加 CSS 类吗?
- python - Pandas 根据条件更快地移动多行
- azure-alerts - 如何监视 Azure SQL 中的表是否为空?