[英]Passing a method as an argument in Scala
這似乎應該很簡單,但是我不知道該怎么寫。
我想要類似以下的函數,該函數查找seq
的max
或min
。
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)
有沒有比這更好的答案了?
直接而不是通過函數直接調用max
或min
方法會更容易。 所以代替:
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.