📜  Scala 中的占位符语法

📅  最后修改于: 2022-05-13 01:54:30.945000             🧑  作者: Mango

Scala 中的占位符语法

使一切简洁的需要导致 Scala 提出了一种称为占位符语法的东西。 Scala 允许使用下划线(表示为“_”)作为一个或多个参数的占位符。我们可以将下划线考虑为需要填写值的内容。但是,每个参数在函数字面量中只能出现一次。
注意:在内部,下划线扩展为函数的字面量,该函数将输入作为 1 个参数,然后检查所提到的条件。相同的规则适用于超过 1 个参数。多个下划线表示多个参数,而不是重复使用相同的参数。因此,当您只想使用 1 个或多个参数时使用此语法。此语法不支持可重用性。
让我们借助示例了解占位符语法。

示例 1:
假设我们要检查数字是否大于 5。

scala> someNumbers.filter(_ > 5)

在上面的示例中,条件在内部扩展为:

scala> someNumbers.filter(x=>x>5) 

变量 x 已替换为下划线,以使函数更简洁。

占位符语法也可用于表示多个参数。

示例 2:
假设我们要添加两个数字。如果我们理解上面的例子,我们会认为两个数字相加的正常语法应该是:

scala> val f = _ + _ 

当它被传递给编译器时,它会给出一个错误,因为你没有提到编译器应该作为输入的数字的“类型”。

val f = _ + _ 
       ˆ 
error: missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2)) 

我们应该提到我们期望从函数中得到的数字类型。类型可以在冒号(':') 的帮助下传递给函数。请注意,在内部,

f = _ + _

扩展为

((x$1, x$2) => x$1.$plus(x$2)).

现在,使用函数将两个数字相加的正确占位符语法是:

scala> val f = (_: Int) + (_: Int) 
f: (Int, Int) => Int =  

//Input  
scala> f(15, 10)
//Output 
res: Int = 25

因此,在传递多个参数时,请确保我们指定要传递的变量的类型。这样编译器就可以理解它需要什么样的输入。

示例 3:

scala> r.map((x,y) => x + y / x min y)

在上面的示例中,参数多次使用。在这种情况下,我们需要四个下划线。根据规则参数的数量和下划线的数量必须相同,所以我们不能使用占位符语法。