簡體   English   中英

Scala:這兩個部分函數是否等效?

[英]Scala: Are these two partial functions equivalent?

這兩個部分函數是否等效?

val f0: PartialFunction[Int, String] = {
  case 10 => "ten"
  case n: Int => s"$n"
}

val f1 = new PartialFunction[Int, String] {
  override def isDefinedAt(x: Int): Boolean = true
  override def apply(v: Int): String = if (v == 10) "ten" else s"$v"
}

UPD

val pf = new PartialFunction[Int, String] {
  def isDefinedAt(x: Int) = x == 10
  def apply(v: Int) = if (isDefinedAt(v)) "ten" else "undefined"
}

def fun(n: Int)(pf: PartialFunction[Int, String]) = pf.apply(n)
println(fun(100)(pf))

現在真的是PF嗎?

我認為您需要2個局部(值)函數來使用PartialFunction的設計方式:一個用於值10,另一個用於其他Int

val f0:PartialFunction[Int, String] = { case 10 => "ten" }
val fDef:PartialFunction[Int, String] = { case n => s"$n" }

以及如何應用它們:

val t1 = (9 to 11) collect f0
t1 shouldBe(Array("ten"))
val t2 = (9 to 11) map (f0 orElse fDef)
t2 shouldBe(Array("9", "ten", "11"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM