簡體   English   中英

如何使用模式匹配 Scala 中的 function 值

[英]How to use pattern matching with function values in Scala

我有幾個具有相同輸入和 output 類型的函數在 object 中初始化

object Utils {
  def f1(value: Int): Double = ???
  def f2(value: Int): Double = ???
  def f3(value: Int): Double = ???
}

我有這些函數的高階值列表:

val x = List(Utils.f1, Utils.f2)

如何使用模式匹配來檢查object中聲明的哪些函數包含在x中? 我想獲得類似於以下代碼的東西:

x(0) match {
  case Utils.f1 => ...
  case Utils.f2 => ...
}

您不能與函數匹配,它沒有有意義定義的相等性。

如果您制作f1f2f3 val ,這將是可能的。 請注意,在進行模式匹配時,將使用引用相等性

object Utils {
  val f1: Int => Double = _ * 10.0
  val f2: Int => Double = _ * 20.0
  val f3: Int => Double = _ * 30.0
}

val x: Seq[Int => Double] = List(Utils.f1, Utils.f2)

import Utils._

x(0) match {
  case `f1` => println(1)
  case `f2` => println(2)
  case `f3` => println(3)
}

如果您保留f1 , f2 , f3 def s 那么

object Utils {
  def f1(value: Int): Double = value * 10.0
  def f2(value: Int): Double = value * 20.0
  def f3(value: Int): Double = value * 30.0
}

val x: Seq[Int => Double] = List(Utils.f1, Utils.f2)
  
val f1: Int => Double = Utils.f1
val f2: Int => Double = Utils.f2
val f3: Int => Double = Utils.f3

x(0) match {
  case `f1` => println(1)
  case `f2` => println(2)
  case `f3` => println(3)
}

產生MatchError

暫無
暫無

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

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