参数列表和返回函数
Parameter list VS returned function
我一直在尝试使用 Scala。我试图理解隐式并遇到这种情况。
- 两个函数的参数
b
的行为是否相同?
- 参数列表是否只是返回函数的语法糖?
我的实验表明,它们的行为相同。
谢谢
implicit val v = 2
// 1.
def testB(a: Int)(b: Int)(implicit i: Int): Int = {
println(a + b + i)
11
}
println(testB(7)(8))
println(testB(7) {
8
})
// 2.
def testC(a: Int): (Int) => Int = {
def innerTest2C(b: Int)(implicit i: Int) = {
println(a + b + i)
11
}
innerTest2C
}
println(testC(7)(8))
println(testC(7) {
8
})
规则是只要一个函数只接受一个参数,您就可以用花括号 {}
替换普通括号 ()
。大括号定义一个块,并允许您在其中放置多个语句。与所有块一样,该块将计算最后一行中表达式的值。
在2.中,函数testC returns是从Int
到Int
的另一个函数,所以你不能用一个参数再次调用testC(7)
的结果:testC(7)(x)
。如果你只考虑 println 语句,这里没有什么不同。
你需要明白的是
def testB(a: Int)(b: Int)
不同于
def testB(a: Int, b: Int)
就前者代表两个函数而言,就像您的第二种情况一样。您可以调用 testB(x) 并将获得从 Int
到 Int
的另一个函数。仅应用函数的部分参数以获得另一个函数称为 currying.
我一直在尝试使用 Scala。我试图理解隐式并遇到这种情况。
- 两个函数的参数
b
的行为是否相同? - 参数列表是否只是返回函数的语法糖?
我的实验表明,它们的行为相同。
谢谢
implicit val v = 2
// 1.
def testB(a: Int)(b: Int)(implicit i: Int): Int = {
println(a + b + i)
11
}
println(testB(7)(8))
println(testB(7) {
8
})
// 2.
def testC(a: Int): (Int) => Int = {
def innerTest2C(b: Int)(implicit i: Int) = {
println(a + b + i)
11
}
innerTest2C
}
println(testC(7)(8))
println(testC(7) {
8
})
规则是只要一个函数只接受一个参数,您就可以用花括号 {}
替换普通括号 ()
。大括号定义一个块,并允许您在其中放置多个语句。与所有块一样,该块将计算最后一行中表达式的值。
在2.中,函数testC returns是从Int
到Int
的另一个函数,所以你不能用一个参数再次调用testC(7)
的结果:testC(7)(x)
。如果你只考虑 println 语句,这里没有什么不同。
你需要明白的是
def testB(a: Int)(b: Int)
不同于
def testB(a: Int, b: Int)
就前者代表两个函数而言,就像您的第二种情况一样。您可以调用 testB(x) 并将获得从 Int
到 Int
的另一个函数。仅应用函数的部分参数以获得另一个函数称为 currying.