[SCALA] _ * 스칼라의 의미 : 무슨 일이 PARAM은 무엇입니까?
SCALA_ * 스칼라의 의미 : 무슨 일이 PARAM은 무엇입니까?
스칼라 (2.9.1)에 새로운이기 때문에, 나는 목록 [이벤트]이 있고 큐 [이벤트]에 복사하고 싶지만, 다음과 같은 구문 대신 큐 [목록 [이벤트] 산출 :
val eventQueue = Queue(events)
어떤 이유로 들어, 작품을 다음과 같은 :
val eventQueue = Queue(events : _*)
그러나 나는 그것이 무엇을 이해하고자하는, 그리고 왜 작동? 난 이미 Queue.apply 함수의 서명을 보았다 :
def apply[A](elems: A*)
그리고 첫 번째 시도가 작동하지 않는 이유는 이해하지만 두 번째의 의미는 무엇인가? 무엇이다, 및 _ *이 경우, 왜 함수가 단지의 Iterable [A]을 적용하지 않는 이유는 무엇입니까?
해결법
-
==============================
1.A :이 유형의 귀속입니다; 스칼라 형 ascriptions의 목적은 무엇인가?를 참조하십시오
A :이 유형의 귀속입니다; 스칼라 형 ascriptions의 목적은 무엇인가?를 참조하십시오
: _ * 즉 가변 인자 가변 인수 시퀀스와 같은 순서 형의 인수를 취급하도록 컴파일러에 지시 타입 귀속의 특별한 경우이다.
시퀀스 또는 반복 가능한 단일 요소가 큐 사용 Queue.apply을 만들 완전히 유효합니다, 그래서 이것은 당신이 [A] 하나의 Iterable을 줄 때 일어나는 정확히 것입니다.
-
==============================
2.이것은 오히려 하나의 인수로 그 모든 것보다, 자신의 인수로 각 요소를 전달하는 컴파일러를 알려주는 특별한 표기법입니다. 여기를 봐.
이것은 오히려 하나의 인수로 그 모든 것보다, 자신의 인수로 각 요소를 전달하는 컴파일러를 알려주는 특별한 표기법입니다. 여기를 봐.
그것은 일련의 인수를 표시하고 언어 사양 "반복 매개 변수"절 4.6.2의 일반 규칙에 "예외"로 언급되는 유형 약어입니다.
함수가 가변 인자를받는 때 예컨대 유용 이러한 방어 합으로서의 기능 : 당신은 XS 같은 목록이있는 경우 (인수가 지능 *) 등의 합 (1), 합 (1,2)으로 호출 할 수있는 목록 = (1,2,3)을 그것은 오히려 지능보다 목록을하기 때문에, XS 자체를 통과 할 수는 없지만 합 사용하여 요소를 전달할 수 있습니다 (XS를 : _ *).
-
==============================
3.파이썬 사람들을 위해 :
파이썬 사람들을 위해 :
스칼라 _ * 연산자 파이썬 *의 -operator 개 이하 동일하다.
예
루이지 Plinge에서 제공하는 링크에서 스칼라 예를 변환 :
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)
모두 다음과 같은 출력을 제공합니다 :
차이 : 위치 매개 변수를 풀고
파이썬의 *의 - 연산자는 고정 인수에 대응 기능을위한 위치 매개 변수 / 매개 변수의 개봉을 처리 할 수 있지만 :
def multiply (x, y): return x * y operands = (2, 4) multiply(*operands)
스칼라와 같은 일을 :
def multiply(x:Int, y:Int) = { x * y; } val operands = (2, 4) multiply (operands : _*)
실패합니다 :
하지만 스칼라와 같은을 달성 할 수 있습니다 :
def multiply(x:Int, y:Int) = { x*y; } val operands = (2, 4) multiply _ tupled operands
Lorrin 넬슨에 따르면이 작동하는 방법이다 :
추가 읽기 :
from https://stackoverflow.com/questions/7938585/what-does-param-mean-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 22 개 필드의 스칼라 경우 클래스의 제한을 극복하기 위해? (0) | 2019.11.03 |
---|---|
[SCALA] 스칼라 : 어떻게 "일반적인"기능 매개 변수를 정의? (0) | 2019.11.03 |
[SCALA] 스칼라에 대한 JVM 힙 크기를 증가? (0) | 2019.11.03 |
[SCALA] 스파크 : 단일 키 RDD와 2 튜플 키 RDD 가입을위한 최선의 전략은 무엇입니까? (0) | 2019.11.03 |
[SCALA] 상관, AnyVal는, AnyRef는, 객체와 자바 코드에서 사용될 경우 그들이 어떻게지도 할 사이의 관계는 무엇인가? (0) | 2019.11.03 |