如何从 Scala 中的运行时值创建部分函数

ser*_*eda 3 scala

我正在尝试从运行时值创建部分函数,​​然后像这样组合部分函数:

class Test(val function: PartialFunction[Int, Boolean]) {
  def add(v: Int): Test = {
    new Test(function.orElse{case v => true})
  }
  def contains(v: Int) = function.isDefinedAt(v)
}

val test: Test = new Test({case 1 => true})
val test2 = test.add(2)
println(test2.contains(1))
println(test2.contains(2))
println(test2.contains(3))
Run Code Online (Sandbox Code Playgroud)

此代码打印

true
true
true
Run Code Online (Sandbox Code Playgroud)

但最后一行应该是假的。为什么会这样?我做错了什么?

Tim*_*Tim 5

{ case v => true }永远是一场比赛。您想测试 的值v

  new Test(function.orElse{case `v` => true})
Run Code Online (Sandbox Code Playgroud)

  • 我重新检查了文档,发现我错了。`isDefinedAt` 确实准确地指示了一个值是否由部分函数处理。所以你的代码已经可以使用了,对于令人困惑的事情深表歉意。 (2认同)