对于Python使用者:
Scala的_*
运算符或多或少等于Python的* -operator。
例
从Luigi Plinge提供的链接转换scala示例:
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
Python看起来像:
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
并都给出以下输出:
什么是
向上
的文档?
区别:解包位置参数
尽管Python的*
-operator也可以处理固定参数函数的位置参数/参数的解压缩:
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
使用Scala进行相同的操作:
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
将失败:
方法乘法的参数不足:(x:Int,y:Int)Int。
未指定的值参数y。
但是使用scala可以实现相同的目的:
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
根据Lorrin Nelson的说法,它是这样工作的:
第一部分f _是其中未指定任何参数的部分应用函数的语法。这用作获取功能对象的机制。tupled返回一个新的arity-1函数,该函数采用单个arity-n元组。
进一步阅读:
def sum(xs: _*)
引发“错误:未绑定的通配符类型”