CoffeeScript 튜토리얼에서“Splats”는 무엇을 의미합니까?


114

이 CoffeeScript 튜토리얼보기 : http://jashkenas.github.com/coffee-script/

나는 Splats가 무엇인지 잘 모르겠습니다. 이 구조는 무엇입니까? (역사적으로) 어디에서 왔습니까?


그리고 평소와 같이, 당신은 또한이 바닐라 JS에서 구현 될 수있는 방법을 알고 있어야합니다 : arguments+ call: stackoverflow.com/questions/17380315/...을
치로 틸리가郝海东冠状病六四事件法轮功

1
나는 무기한 연속체로 (페인트 등) "splatted"도착 매개 변수로 생각 좋아
arviman

3
파이썬은-경사 누군가를 위해 : 이것은 당신입니다 *args에서 def foo(*args):.
maligree

1
용어 참고 : ES6는 유사하지만 접두사 구문을 채택했습니다. ES6 수신에 , ...args이름이 나머지 매개 변수 및 확대 ...args라는 함수 호출 / 배열 / 객체 리터럴로 확산
베니 Cherniavsky-Paskin

답변:


199

"splat 연산자"라는 용어는 Ruby에서 유래되었으며, 여기서 *문자 ( "splat"라고도 함- 전문 용어 파일 항목 참조 )는 인수 목록의 항목이 인수 목록을 "흡수"해야 함을 나타내는 데 사용됩니다.

커피 스크립트는 초기 (참조 루비 스타일의 표시가 채택 문제 16 ), 그러나 더글러스 크록 포드의 제안에, 구문이 변경되었습니다 *xx...(참조 나중에 몇 주 문제 45 ). 그럼에도 불구하고 CoffeeScripters는 여전히 구문을 "splat"또는 "splat 연산자"라고합니다.

그들이 실제로하는 일에 관해서, splats arguments는 splatted 인수가 모든 "추가"인수의 배열이되도록 객체를 슬라이스합니다 . 가장 사소한 예는

(args...) ->

이 경우 args는 단순히의 배열 복사본입니다 arguments. Splatted 인수는 표준 인수의 앞, 뒤 또는 사이에 올 수 있습니다.

(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->

처음 두 경우에서 함수가 0-1 개의 인수를 받으면 rest빈 배열이됩니다. 마지막 경우, 함수는 rest비어 있지 않기 위해 2 개 이상의 인수를 받아야 합니다.

JavaScript는 같은 이름 (C와 Java가하는 방식)을 가진 함수에 대해 여러 서명을 허용하지 않기 때문에 스 플랫은 다양한 인수 수를 처리하는 데 엄청난 시간을 절약 해줍니다.


2
C # params키워드 와 유사 합니다.
ThatMatthew

언제 이것을 사용해야합니까?
Jeff Scott Ward

1
수락하려는 매개 변수의 수를 모를 때.
gprasant dec.

1
기술적으로 [variadic function] ( en.wikipedia.org/wiki/Variadic_function ) 또는 무기한 "arity"의 함수로 알려져 있습니다. 대부분의 언어는 타원 형식을 사용하여 가변 인수를 나타냅니다.
Lawrence Dol 2015 년

1
@JeffScottWard의 완벽한 예는 console.log이며, 여러 인수를 허용합니다. console.log('this:',variable,'should be replaced with', another_variable);
Rob

13

파이썬을 알고 있다면 함수 매개 변수를 목록으로 취급 할 수 있기 때문에 args...대략.*args

예를 들면 :

concat = (args...) -> args.join(', ')
concat('hello', 'world') == 'hello, world'
concat('ready', 'set', 'go!') == 'ready, set, go!'

그것은 assginments에서도 작동합니다.

[first, rest...] = [1, 2, 3, 4]
first == 1
rest == [2, 3, 4]

6

Splats는 ...var-args (가변 개수의 인수를 사용하는 함수) 에 대한 연산자를 사용하는 용어입니다 .


참조 : Python의 * args 및 ** kwargs, ActionScript 3의 나머지 매개 변수.
요르단

3

나는 그것이 자바 스크립트의 인수 객체에 대한 구문 설탕이라고 생각합니다.

아이디어는 루비의 splat 연산자* 에서 나올 수 있습니다 .


기술적으로는 할당에서 왼쪽으로 사용할 수 있고 명명 된 인수 (in (x, rest...) ->, restwont contain x, argumentsdoes) 와 결합 할 수 있으므로 조금 더 많습니다 .
keppla
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.