Untuk orang-orang Python:
Operator Scala _*
kurang lebih setara dengan * -operator Python .
Contoh
Mengonversi contoh skala dari tautan yang disediakan oleh Luigi Plinge :
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
ke Python akan terlihat seperti:
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
dan keduanya memberikan hasil sebagai berikut:
Apa
up
doc?
Perbedaannya: membongkar parameter posisi
Sedangkan Python *
-operator juga dapat menangani pembongkaran parameter / parameter posisi untuk fungsi fixed-arity:
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
Melakukan hal yang sama dengan Scala:
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
akan gagal:
tidak cukup argumen untuk metode multiply: (x: Int, y: Int) Int.
Parameter nilai tidak ditentukan y.
Tetapi dimungkinkan untuk mencapai hal yang sama dengan scala:
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
Menurut Lorrin Nelson inilah cara kerjanya:
Bagian pertama, f _, adalah sintaks untuk fungsi yang diterapkan sebagian di mana tidak ada argumen yang ditentukan. Ini bekerja sebagai mekanisme untuk mendapatkan objek fungsi. tupled mengembalikan fungsi baru dari arity-1 yang mengambil satu tupel arity-n.
Bacaan selanjutnya:
def sum(xs: _*)
melempar 'kesalahan: jenis wildcard tidak terikat'