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: _*)
파이썬은 다음과 같습니다.
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
둘 다 다음 출력을 제공합니다.
무엇
최대
문서는?
차이점 : 위치 매개 변수 압축 풀기
파이썬의 *
-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.
그러나 스칼라를 사용하여 동일한 결과를 얻을 수 있습니다.
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
Lorrin Nelson 에 따르면 이것이 작동하는 방식입니다.
첫 번째 부분 인 f _는 인수가 지정되지 않은 부분적으로 적용된 함수의 구문입니다. 이것은 함수 객체를 확보하는 메커니즘으로 작동합니다. tupled는 단일 arity-n 튜플을 취하는 arity-1의 새로운 함수를 반환합니다.
추가 읽기 :
def sum(xs: _*)
'오류 : 바인딩되지 않은 와일드 카드 유형'발생