当前位置: 首页 > 知识库问答 >
问题:

如何将一个lambda表达式对象分配给另一个?

颜杰
2023-03-14
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)
val exitCheck = operatorType match {
   case "_equal" => equalCheck; 
   case "_greaterthan" => greaterthanCheck; 
   case "_lessthan" => lessthanCheck; 
   case "_notequal" => notEqualCheck;
}

共有1个答案

吕学
2023-03-14

试试看

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
 类似资料:
  • 问题内容: 我想了解原始和对象引用变量的行为方式不同。我以Kathy Sierra的 OCA / OCP Java SE7中 的以下代码为例: 在上面的代码中,我获得了更改之前和之后的值。 基本变量case的输出为: 但是,在对象引用变量中,一旦更改了的值,我将获得不同的值 参考变量大小写的输出为: 书中提到在两种情况下都复制位模式并放置新副本。如果这是真的,那为什么我们会得到不同的行为呢? 问题

  • 问题内容: 我有一个对象列表。首先,我需要按类型对其进行排序。比按faceValue。最后,总结所有数量: 结果列表必须仅包含3个新硬币对象: 怎么只用一个lambda表达式写出来呢? 问题答案: 您可以使用as 解决: 或进一步复杂的一个班轮分组,总和为:

  • 问题内容: 我有SourceObjects列表,我需要将其转换为ResultObjects列表。 我可以使用ResultObject的方法将一个对象获取到另一个对象: 我当然可以这样: 但对于能够展示如何使用 rxJava 进行相同操作的人,我将非常感激。 问题答案: 如果发出,则可以使用以下运算符: (将您的列表转换为可观察项) (将您的商品转换为其他商品) 运算符(将完成的Observable

  • 问题内容: 我只是想知道是否可以使用一个正则表达式来匹配另一个,这是某种形式的: 正则表达式完全可以实现这种功能吗?我正在使用python进行工作,因此有关该模块实现的任何建议都将有所帮助,但我将尽我所能获取有关正则表达式的信息。 编辑:好的,显然需要按顺序进行澄清!我绝对知道正常的匹配语法如下所示: 但是我想知道正则表达式是否能够匹配我在上面试图解释的非语法正确版本中的其他较不具体的表达式,bx

  • 问题内容: 我有两节课。和。 我有一个要在中使用的功能。我当时正在考虑将的引用传递给的构造函数,然后再调用该函数。 那行得通吗?有人可以给我举个例子吗? 提前致谢! 问题答案: 是的,它将起作用。这是一种不错的方法。您只需传递A类的 实例 : 然后您可以拥有:

  • 我试图学习功能性Kotlin,并编写了以下测试代码: 在REPL中,我可以成功调用“findBorrowerX”: 但是我如何拨打“findBorrowerX2”的电话: 并将迭代的借用器x传递给getName?? 这看起来有关联,但我不确定: Kotlin:如何将一个函数作为参数传递给另一个? 提前感谢您对此的帮助! 编辑: 下面是我想做的等效Scala代码: 也许这在科特林是不可能的?