Đối với folks Python:
hành _*
Scala là nhiều hay ít tương đương với Python của *-operator.
Ví dụ
Chuyển đổi ví dụ scala từ link cung cấp bởi Luigi Plinge:
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
để Python sẽ trông như thế:
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
và cả cung cấp cho các followin sản lượng g:
What's
up
doc?
Sự khác biệt: giải nén tham số vị trí
Trong khi *
-operator Python cũng có thể đối phó với giải nén các tham số vị trí/thông số cho các chức năng cố định arity:
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
D oing cùng với Scala:
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
sẽ thất bại:
not enough arguments for method multiply: (x: Int, y: Int)Int.
Unspecified value parameter y.
Nhưng chúng ta có thể đạt được cùng với scala:
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
Theo Lorrin Nelson đây là cách hoạt động:
The first part, f _, is the syntax for a partially applied function in which none of the arguments have been specified. This works as a mechanism to get a hold of the function object. tupled returns a new function which of arity-1 that takes a single arity-n tuple.
thêm tác đọc:
Cảm ơn bạn đã chỉ cho tôi nhập kiểu chữ! – Chris