Scala 函数式文字
Scala functional literals
val x = (x:Int, y:Int) => (_:Int) + (_:Int)
val y = (_:Int) + (_:Int)
在 Scala 的上述两个函数文字中,当我调用第一个(例如:x(2,3))时,它不是 return 求和。相反,它 return 是另一个结果,比如 res0。当我调用 res0(2,3) 时,它 return 我就是总和。而第二个,return 是第一个电话的答案(比如:y(2,3) 给我 5)。
有人可以解释一下为什么第一个没有 return 我在第一个调用本身中的总和(即 5)。
我在 REPL 中试过了。
像这样写出 x
和 y
的完整类型可能会有所帮助
val x: (Int, Int) => (Int, Int) => Int =
(a: Int, b: Int) => (_: Int) + (_: Int)
val y: (Int, Int) => Int =
(_: Int) + (_: Int)
这里我们看到当 x
应用于两个参数时它 returns 又是一个
类型的函数
(Int, Int) => Int
注意 shorthand
(_: Int) + (_: Int)
等同于
(a: Int, b: Int) => a + b
val x = (x:Int, y:Int) => (_:Int) + (_:Int)
相当于
val x = (x : Int, y : Int) => ((arg1:Int, arg2:Int) => (arg1:Int) + (arg1:Int))
同时
val y = (_:Int) + (_:Int)
相当于
(x:Int, y:Int) => (x:Int) + (x:Int)
val x = (x:Int, y:Int) => (_:Int) + (_:Int)
val y = (_:Int) + (_:Int)
在 Scala 的上述两个函数文字中,当我调用第一个(例如:x(2,3))时,它不是 return 求和。相反,它 return 是另一个结果,比如 res0。当我调用 res0(2,3) 时,它 return 我就是总和。而第二个,return 是第一个电话的答案(比如:y(2,3) 给我 5)。
有人可以解释一下为什么第一个没有 return 我在第一个调用本身中的总和(即 5)。
我在 REPL 中试过了。
像这样写出 x
和 y
的完整类型可能会有所帮助
val x: (Int, Int) => (Int, Int) => Int =
(a: Int, b: Int) => (_: Int) + (_: Int)
val y: (Int, Int) => Int =
(_: Int) + (_: Int)
这里我们看到当 x
应用于两个参数时它 returns 又是一个
(Int, Int) => Int
注意 shorthand
(_: Int) + (_: Int)
等同于
(a: Int, b: Int) => a + b
val x = (x:Int, y:Int) => (_:Int) + (_:Int)
相当于
val x = (x : Int, y : Int) => ((arg1:Int, arg2:Int) => (arg1:Int) + (arg1:Int))
同时
val y = (_:Int) + (_:Int)
相当于
(x:Int, y:Int) => (x:Int) + (x:Int)