이 CoffeeScript 튜토리얼보기 : http://jashkenas.github.com/coffee-script/
나는 Splats가 무엇인지 잘 모르겠습니다. 이 구조는 무엇입니까? (역사적으로) 어디에서 왔습니까?
답변
“splat 연산자”라는 용어는 Ruby에서 유래되었으며, 여기서 *
문자 ( “splat”라고도 함- 전문 용어 파일 항목 참조 )는 인수 목록의 항목이 인수 목록을 “흡수”해야 함을 나타내는 데 사용됩니다.
커피 스크립트는 초기 (참조 루비 스타일의 표시가 채택 문제 16 ), 그러나 더글러스 크록 포드의 제안에, 구문이 변경되었습니다 *x
에 x...
(참조 나중에 몇 주 문제 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 (가변 개수의 인수를 사용하는 함수) 에 대한 연산자를 사용하는 용어입니다 .