Scala defd=(x:int)=>;f(x)习惯了吗?

Scala defd=(x:int)=>;f(x)习惯了吗?,scala,Scala,比如说: def f(i: Int) : String = i.toString def d = (x: int) => f(x) 当d不接受任何参数时,如何使用它?这里,d返回一个函数,该函数接受Int并返回字符串,因此d的签名是 def d: Int => String 实际上,d是否实际实现为def或val并不重要,因为它不接受参数,并且确定性地返回x=>f(x) 因此,每次调用d,都会返回函数x=>f(x),您可以像调用任何其他函数一样调用该函数,该函数接受Int,因此:

比如说:

def f(i: Int) : String = i.toString
def d = (x: int) => f(x)

d
不接受任何参数时,如何使用它?

这里,
d
返回一个函数,该函数接受
Int
并返回
字符串,因此
d
的签名是

def d: Int => String
实际上,
d
是否实际实现为
def
val
并不重要,因为它不接受参数,并且确定性地返回
x=>f(x)

因此,每次调用
d
,都会返回函数
x=>f(x)
,您可以像调用任何其他函数一样调用该函数,该函数接受
Int
,因此:

println(d)     // prints <function1>
println(d(10)) // prints 10
println(d(5))  // prints 5

请注意,在您的特定情况下,
d
实际上只是部分应用函数
f
的别名

这里,
d
返回一个函数,该函数接受
Int
并返回
字符串,因此
d
的签名是

def d: Int => String
实际上,
d
是否实际实现为
def
val
并不重要,因为它不接受参数,并且确定性地返回
x=>f(x)

因此,每次调用
d
,都会返回函数
x=>f(x)
,您可以像调用任何其他函数一样调用该函数,该函数接受
Int
,因此:

println(d)     // prints <function1>
println(d(10)) // prints 10
println(d(5))  // prints 5

请注意,在您的特定情况下,
d
实际上只是部分应用函数
f
的别名

这里,
d
返回一个函数,该函数接受
Int
并返回
字符串,因此
d
的签名是

def d: Int => String
实际上,
d
是否实际实现为
def
val
并不重要,因为它不接受参数,并且确定性地返回
x=>f(x)

因此,每次调用
d
,都会返回函数
x=>f(x)
,您可以像调用任何其他函数一样调用该函数,该函数接受
Int
,因此:

println(d)     // prints <function1>
println(d(10)) // prints 10
println(d(5))  // prints 5

请注意,在您的特定情况下,
d
实际上只是部分应用函数
f
的别名

这里,
d
返回一个函数,该函数接受
Int
并返回
字符串,因此
d
的签名是

def d: Int => String
实际上,
d
是否实际实现为
def
val
并不重要,因为它不接受参数,并且确定性地返回
x=>f(x)

因此,每次调用
d
,都会返回函数
x=>f(x)
,您可以像调用任何其他函数一样调用该函数,该函数接受
Int
,因此:

println(d)     // prints <function1>
println(d(10)) // prints 10
println(d(5))  // prints 5

请注意,在您的特定情况下,
d
实际上只是部分应用函数
f
的别名

但是,它确实需要参数:

scala> def f(i: Int) : String = i.toString
f: (i: Int)String

scala> def d = (x: Int) => f(x)
d: Int => String

因此,
d
实际上是一个函数,它接受一个
Int
并返回一个
String
…这在这个例子中是没有意义的,因为它与原始函数做的是相同的事情。作为包装函数和使用包装函数执行其他转换的一种方法,这种类型的操作通常更有用,但它确实需要参数:

scala> def f(i: Int) : String = i.toString
f: (i: Int)String

scala> def d = (x: Int) => f(x)
d: Int => String

因此,
d
实际上是一个函数,它接受一个
Int
并返回一个
String
…这在这个例子中是没有意义的,因为它与原始函数做的是相同的事情。作为包装函数和使用包装函数执行其他转换的一种方法,这种类型的操作通常更有用,但它确实需要参数:

scala> def f(i: Int) : String = i.toString
f: (i: Int)String

scala> def d = (x: Int) => f(x)
d: Int => String

因此,
d
实际上是一个函数,它接受一个
Int
并返回一个
String
…这在这个例子中是没有意义的,因为它与原始函数做的是相同的事情。作为包装函数和使用包装函数执行其他转换的一种方法,这种类型的操作通常更有用,但它确实需要参数:

scala> def f(i: Int) : String = i.toString
f: (i: Int)String

scala> def d = (x: Int) => f(x)
d: Int => String
因此,
d
实际上是一个函数,它接受一个
Int
并返回一个
String
…这在这个例子中是没有意义的,因为它与原始函数做的是相同的事情。作为包装函数和使用包装函数进行其他转换的一种方法,这种类型的操作通常更有用