簡體   English   中英

在Scala中將方法作為參數傳遞

[英]Passing a method as an argument in Scala

這似乎應該很簡單,但是我不知道該怎么寫。

我想要類似以下的函數,該函數查找seqmaxmin

def maxOrMin_1(seq: IndexedSeq[Int], maxMin: IndexedSeq[Int] => Int): Int = maxMin(seq)

但是我不希望maxMin作為函數,而是希望它成為IndexedSeq的方法,這樣我可以編寫:

def maxOrMin_2(seq: IndexedSeq[Int], maxMin: IndexedSeq[Int] => Int): Int = seq.maxOrMin

但是編譯器說value maxOrMin is not a member of IndexedSeq[Int]

此外,當我嘗試調用maxOrMin_2 (假設我能弄清楚如何編寫),如下所示:

maxOrMin_2(IndexedSeq(1, 2, 3), IndexedSeq.max)

我收到一個編譯器消息: value max is not a member of object IndexedSeq

我很高興知道如何編寫這些內容。 謝謝。

更新:我剛剛發現可以解決這樣的呼叫問題。

maxOrMin_2(IndexedSeq(1, 2, 3), (xs: IndexedSeq[Int]) => xs.max)

這讓我有些word。 但是,除非有更好的方法,否則我相信它將成功。

更新:現在我知道如何調用它了, maxOrMin_1可以正常工作。

maxOrMin_1(IndexedSeq(1, 2, 3), (xs: IndexedSeq[Int]) => xs.max)

有沒有比這更好的答案了?

直接而不是通過函數直接調用maxmin方法會更容易。 所以代替:

val input = IndexedSeq(1, 2, 3)

maxOrMin_1(input, (xs: IndexedSeq[Int]) => xs.max)
maxOrMin_1(input, (xs: IndexedSeq[Int]) => xs.min)

您只需直接致電:

input.max
input.min

如果仍然需要原始函數,則可以通過使(在Scala中產生更好的類型推斷)的currying(輸入和函數的單獨參數列表)使調用更簡潔。

def maxOrMin_1(seq: IndexedSeq[Int])(maxMin: IndexedSeq[Int] => Int): Int = maxMin(seq)

然后調用如下:

maxOrMin_1(input)(_.max)
maxOrMin_1(input)(_.min)

暫無
暫無

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

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