如何"应用"无参数函数的结果

Mal*_*lio 8 scala

这有效:

List(3, 1, 2).sorted apply 1
res1: Int = 2
Run Code Online (Sandbox Code Playgroud)

这有效:

var x = List(3, 1, 2).sorted
x: List[Int] = List(1, 2, 3)
x(1)
res2: Int = 2
Run Code Online (Sandbox Code Playgroud)

但这不是:

List(3, 1, 2).sorted (1)

error: type mismatch;
 found   : Int(1)
 required: Ordering[?]
       List(3, 1, 2).sorted (1)
                             ^
Run Code Online (Sandbox Code Playgroud)

甚至括号也不能解析解析器到我想要的东西:

(List(3, 1, 2).sorted)(1)

error: type mismatch;
 found   : Int(1)
 required: Ordering[?]
       (List(3, 1, 2).sorted)(1)
Run Code Online (Sandbox Code Playgroud)

这似乎是一种自然的表达.我究竟做错了什么?

Sae*_*aew 6

这有效:

(Listed(3, 1, 2).sorted _)(1),

但我不确定使用它是否比使用起来更方便:

Listed(3, 1, 2).sorted apply 1.

无论如何我会选择后者.


Lan*_*dei 5

我认为你必须保留申请.原因是排序不是 "无参数",它被定义为

def sorted [B >: A] (implicit ord: Ordering[B]) : List[A]
Run Code Online (Sandbox Code Playgroud)

由于这是一个隐式参数,Ordering [Int]通常是自动提供的,但是如果你使用parens,编译器会认为你想要指定另一个Ordering [Int](让我们说倒退).