Function 为什么命名函数的类型不同于scala中的匿名函数
在scala中,命名函数定义为:Function 为什么命名函数的类型不同于scala中的匿名函数,function,scala,anonymous,Function,Scala,Anonymous,在scala中,命名函数定义为: scala> def addOne(x: Int): Int = x+1 addOne: (x: Int)Int scala> :type addOne (x: Int)Int 一个匿名的名字是: scala> val addOne = (x:Int) => x+1 addOne: Int => Int = <function1> scala> :type addOne Int => Int scal
scala> def addOne(x: Int): Int = x+1
addOne: (x: Int)Int
scala> :type addOne
(x: Int)Int
一个匿名的名字是:
scala> val addOne = (x:Int) => x+1
addOne: Int => Int = <function1>
scala> :type addOne
Int => Int
scala>valaddone=(x:Int)=>x+1
addOne:Int=>Int=
scala>:键入addOne
Int=>Int
为什么他们的类型看起来不同
为什么命名函数不能作为参数传递给另一个函数
不应该从类型和一阶行为的角度统一对待这两者吗?def addOne(x:Int):Int
不是scala中的函数。这是某个对象的一种方法
像val addOne=(x:Int)=>x+1
这样的函数是FunctionN
类型的对象(在本例中为Function1
),方法为apply
可以在scala中将方法用作函数-编译器可以从方法创建函数,例如:
scala> List(1, 2, 3).map((1).+) // or just `1+`
res0: List[Int] = List(2, 3, 4)
在这种情况下,对象1
的方法+
用作函数x=>(1)。+(x)
对象Predef
的方法println
用作函数s=>Predef.println
由于版本2.10
您不能在方法上使用:键入:
scala> def addOne(x: Int): Int = x+1
addOne: (x: Int)Int
scala> :type addOne
<console>:9: error: missing arguments for method addOne;
follow this method with `_' if you want to treat it as a partially applied function
addOne
^
scala>defaddone(x:Int):Int=x+1
地址:(x:Int)Int
scala>:键入addOne
:9:错误:方法addOne缺少参数;
如果要将其视为部分应用的函数,请使用“\u1”遵循此方法
阿登
^
def addOne(x:Int):Int
不是scala中的函数。这是某个对象的一种方法
像val addOne=(x:Int)=>x+1
这样的函数是FunctionN
类型的对象(在本例中为Function1
),方法为apply
可以在scala中将方法用作函数-编译器可以从方法创建函数,例如:
scala> List(1, 2, 3).map((1).+) // or just `1+`
res0: List[Int] = List(2, 3, 4)
在这种情况下,对象1
的方法+
用作函数x=>(1)。+(x)
对象Predef
的方法println
用作函数s=>Predef.println
由于版本2.10
您不能在方法上使用:键入:
scala> def addOne(x: Int): Int = x+1
addOne: (x: Int)Int
scala> :type addOne
<console>:9: error: missing arguments for method addOne;
follow this method with `_' if you want to treat it as a partially applied function
addOne
^
scala>defaddone(x:Int):Int=x+1
地址:(x:Int)Int
scala>:键入addOne
:9:错误:方法addOne缺少参数;
如果要将其视为部分应用的函数,请使用“\u1”遵循此方法
阿登
^