Int =>中_的用法是什么? Int = _ + 1

时间:2017-01-05 14:37:24

标签: scala

在下面的代码中,下划线字符用法的分类(或技术名称)是什么?

scala> def f: Int => Int = _ + 1
f: Int => Int

scala> f(2)
res0: Int = 3

2 个答案:

答案 0 :(得分:11)

来自Functional Programming in Scala

  

...有时称为函数文字的下划线语法,我们是   甚至没有打扰命名函数的参数,使用_   代表唯一的论点。使用这种表示法时,我们只能   在函数体中引用一次函数参数(如果   我们再次提到_,它指的是函数的另一个参数)

在你的情况下,做:

def f: Int => Int = _ + 1

与此相同:

def f: Int => Int = x => x + 1

这似乎是不必要的,但是将匿名函数传递给更高阶函数(这些函数将函数作为参数)变得非常方便:

def higherOrder(f: Int => Int) = { /* some implementation */ }

// Using your function you declared already
higherOrder(f)  

// Passing an anonymous function
higherOrder((x: Int) => x + 1)
higherOrder((x) => x + 1)
higherOrder(x => x + 1)

// Passing an anonymous function with underscore syntax
higherOrder(_ + 1)

答案 1 :(得分:0)

将其视为由来电者提供的输入

scala> def incrementByOne: Int => Int = _ + 1
incrementByOne: Int => Int

你回来的是一个需要Int并返回Int的函数。

X => Y

返回类型表示将类型X作为输入并返回类型Y作为输出的函数。现在XY可以是任何类型。

要完成该示例,您可以将其称为

scala> incrementByOne(10)
res0: Int = 11

scala> incrementByOne(99)
res1: Int = 100

scala> 

Int作为输入(1099)并返回Int作为输出(11100