Scala 部分应用的函数不';我不能在斯卡拉工作
为什么我不能用第二个参数调用Scala 部分应用的函数不';我不能在斯卡拉工作,scala,Scala,为什么我不能用第二个参数调用g2(1,Int:Int)(9) g2(1,Int)返回一个函数,然后我用参数调用该函数。同时,在上面的示例中,我可以调用f3(9),但是它与g2(1,u:Int)(9)IMHO相同 // OK def f1: (Int, Int) => Int = _ + _ val f2: (Int, Int) => Int = f1 val f3: (Int) => Int = f2(1, _: Int) println
g2(1,Int:Int)(9)
g2(1,Int)
返回一个函数
,然后我用参数调用该函数。同时,在上面的示例中,我可以调用f3(9)
,但是它与g2(1,u:Int)(9)
IMHO相同
// OK
def f1: (Int, Int) => Int = _ + _
val f2: (Int, Int) => Int = f1
val f3: (Int) => Int = f2(1, _: Int)
println {
f3(9)
}
// FAIL
def g1: (Int, Int) => Int = _ + _
val g2: (Int, Int) => Int = g1
println {
g2(1, _: Int)(9) // Error: 'g2' does not take parameters
}
这是匿名函数中下划线范围的问题。有关规则,请参见此处:
根据上面链接的规则1,
g2(1,x:Int)(9)
被解释为(x:Int)=>g2(1,x)(9)
。因此,您需要添加括号,以便规则2开始工作:(g2(1,:Int))(9)
这是匿名函数中下划线范围的问题。有关规则,请参见此处:
根据上面链接的规则1,
g2(1,x:Int)(9)
被解释为(x:Int)=>g2(1,x)(9)
。因此,您需要添加括号,以便规则2开始工作:(g2(1,:Int))(9)
这是匿名函数中下划线范围的问题。有关规则,请参见此处:
根据上面链接的规则1,
g2(1,x:Int)(9)
被解释为(x:Int)=>g2(1,x)(9)
。因此,您需要添加括号,以便规则2开始工作:(g2(1,:Int))(9)
这是匿名函数中下划线范围的问题。有关规则,请参见此处:
根据上面链接的规则1,
g2(1,x:Int)(9)
被解释为(x:Int)=>g2(1,x)(9)
。因此,您需要添加括号,规则2才能开始工作:(g2(1,:Int))(9)
当您添加注释时,(g2(1,:Int))(9)
起作用
Scala有多个参数列表,因此f(x)(y)
的解析与(f(x))(y)
不同。由于g
只接受一个参数列表,它不能接受第二个参数列表,因此需要显式分组
g2(1,Int:Int)(9)
表示:取函数g2(x,y)(z)
,并应用参数x=1,z=9
(g2(1,Int))(9)
表示:取函数g2(x,y)
,并应用参数x=1
。然后对结果函数应用y=9
。当您添加注释时,(g2(1,:Int))(9)
起作用
Scala有多个参数列表,因此f(x)(y)
的解析与(f(x))(y)
不同。由于g
只接受一个参数列表,它不能接受第二个参数列表,因此需要显式分组
g2(1,Int:Int)(9)
表示:取函数g2(x,y)(z)
,并应用参数x=1,z=9
(g2(1,Int))(9)
表示:取函数g2(x,y)
,并应用参数x=1
。然后对结果函数应用y=9
。当您添加注释时,(g2(1,:Int))(9)
起作用
Scala有多个参数列表,因此f(x)(y)
的解析与(f(x))(y)
不同。由于g
只接受一个参数列表,它不能接受第二个参数列表,因此需要显式分组
g2(1,Int:Int)(9)
表示:取函数g2(x,y)(z)
,并应用参数x=1,z=9
(g2(1,Int))(9)
表示:取函数g2(x,y)
,并应用参数x=1
。然后对结果函数应用y=9
。当您添加注释时,(g2(1,:Int))(9)
起作用
Scala有多个参数列表,因此f(x)(y)
的解析与(f(x))(y)
不同。由于g
只接受一个参数列表,它不能接受第二个参数列表,因此需要显式分组
g2(1,Int:Int)(9)
表示:取函数g2(x,y)(z)
,并应用参数x=1,z=9
(g2(1,Int))(9)
表示:取函数g2(x,y)
,并应用参数x=1
。然后对结果函数应用y=9
。要使其工作,我需要添加括号:(g2(1,:Int))(9)
,这很奇怪。(g2(1,:Int))(9)
工作吗?scala有多个参数列表,因此f(x)(y)
的解析可能与(f(x))(y)
不同。我不确定它与通配符(f(x,)
)是如何相互作用的,我想是的,正如我用括号说的那样,它是有效的。@Finkleson我只是在完成我的评论之后才看到你的评论;)您还可以编写g2(1,:Int)。应用(9)
。要使其工作,我需要添加括号:(g2(1,:Int))(9)
,这很奇怪。(g2(1,:Int))(9)
工作吗?scala有多个参数列表,因此f(x)(y)
的解析可能与(f(x))(y)
不同。我不确定它与通配符(f(x,)
)是如何相互作用的,我想是的,正如我用括号说的那样,它是有效的。@Finkleson我只是在完成我的评论之后才看到你的评论;)您还可以编写g2(1,:Int)。应用(9)
。要使其工作,我需要添加括号:(g2(1,:Int))(9)
,这很奇怪。(g2(1,:Int))(9)
工作吗?scala有多个参数列表,因此f(x)(y)
的解析可能与(f(x))(y)
不同。我不确定它与通配符(f(x,)
)是如何相互作用的,我想是的,正如我用括号说的那样,它是有效的。@Finkleson我只是在完成我的评论之后才看到你的评论;)您还可以编写g2(1,:Int)。应用(9)
。要使其工作,我需要添加括号:(g2(1,:Int))(9)
,这很奇怪。(g2(1,:Int))(9)
工作吗?scala有多个参数列表,因此f(x)(y)
的解析可能与(f(x))(y)
不同。我不确定