簡體   English   中英

部分函數作為Scala中的輸入參數

[英]Partial Functions as an input parameter in scala

我試圖將部分函數作為輸入傳遞給平方函數。 以下代碼是什么?

package PartialFunction

object PartialFunctionSum {
  val yourConstant = 10

  val pf: PartialFunction[(Int, Int), Int] = {
    case (x, y) => x + y + yourConstant
  }
  def square(cb:(Int, Int) => Int): Unit = {
     println(cb(5,10))
  }

  def main(args: Array[String]): Unit= {
   square(pf)
  }  
}

PartialFunction是Function1 (a => b), square需要一個Function2 ((a,b)=> c)

完成您要執行的操作的一種方法是將cb類型更改為Function1

object PartialFunctionSum extends App {

  val yourConstant = 10

  val pf: PartialFunction[(Int, Int), Int] = {
    case (x, y) => x + y + yourConstant
  }
  def square(cb:((Int, Int)) => Int): Unit = {
    println(cb(5,10))
  }

  square(pf)

}

另外,在需要FunctionX任何地方,都可以定義PartialFunction ,因此

square {
  case (x, y) => x + y + yourConstant
}

或者使用lambda在Function2中轉換PartialFunction

square( pf.apply(_, _) )

任何需要函數的地方都可以傳遞PartialFunction,

您的問題是平方定義:

def square(cb:(Int, Int) => Int): Unit = {
    println(cb(5,10))
}

這意味着cb是一個接收兩個Int並返回另一個Int的函數。

只需如下更改方形簽名:

def square(cb: ((Int, Int)) => Int): Unit = {
  println(cb(5 -> 10))
}

現在,您的類型兼容了,其余代碼可以按預期工作。

(Int, Int) => IntFunction2[Int, Int, Int] (接受2個Int參數並返回IntFunction2[Int, Int, Int] )的實例,而不是PartialFunction[(Int, Int), Int] (接受類型(Int, Int)的輸入並返回Int

如果要將參數作為元組傳遞,則:

def square(cb:PartialFunction[(Int, Int),Int]): Unit = {
     println(cb((5,10)))
  }

例:

def square(cb:PartialFunction[(Int, Int),Int]): Unit = {
     println(cb((5,10)))
  }

square: (cb: PartialFunction[(Int, Int),Int])Unit

scala> square{case (i, j) => i * j}
50

暫無
暫無

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

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