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

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

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



답변

“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가하는 방식)을 가진 함수에 대해 여러 서명을 허용하지 않기 때문에 스 플랫은 다양한 인수 수를 처리하는 데 엄청난 시간을 절약 해줍니다.


답변

파이썬을 알고 있다면 함수 매개 변수를 목록으로 취급 할 수 있기 때문에 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]


답변

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


답변

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

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


답변