这似乎应该相当简单,但我无法弄清楚如何编写它。
我喜欢以下功能,可以找到max
的{{1}}或min
。
seq
但我不想将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)
正常工作。
maxOrMin_1
有没有比这更好的答案?
答案 0 :(得分:0)
直接简单地调用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
如果您仍然需要原始函数,可以通过currying(输入和函数的单独参数列表)使调用更简洁,这会在Scala中产生更好的类型推断:
def maxOrMin_1(seq: IndexedSeq[Int])(maxMin: IndexedSeq[Int] => Int): Int = maxMin(seq)
然后打电话如下:
maxOrMin_1(input)(_.max)
maxOrMin_1(input)(_.min)