Python halkı için:
Scala'nın _*
operatörü aşağı yukarı Python'un * operatörünün eşdeğeridir .
Misal
Dan scala örneği dönüştürme linke tarafından sağlanan Luigi Plinge :
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
Python'a şöyle görünür:
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
ve her ikisi de aşağıdaki çıktıyı verir:
Nedir
yukarı
doktor?
Fark: Konumsal parametreleri paketten çıkarma
Python'un *
-operatörü, sabit uçuş fonksiyonları için konumsal parametrelerin / parametrelerin paketinin açılmasıyla da ilgilenebilir:
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
Scala ile aynı şeyi yapmak:
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
başaramayacak:
yöntem çarpımı için yeterli argüman yok: (x: Int, y: Int) Int.
Belirtilmemiş değer parametresi y.
Ancak aynı şeyi scala ile elde etmek mümkündür:
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
Lorrin Nelson'a göre şu şekilde işliyor:
İlk bölüm, f _, bağımsız değişkenlerin hiçbirinin belirtilmediği kısmen uygulanan bir işlevin sözdizimidir. Bu, işlev nesnesini elde etmek için bir mekanizma olarak çalışır. tupled, tek bir arity-n demetini alan arity-1'den yeni bir işlev döndürür.
Diğer okuma:
def sum(xs: _*)
'error: