이 CoffeeScript 튜토리얼보기 : http://jashkenas.github.com/coffee-script/
나는 Splats가 무엇인지 잘 모르겠습니다. 이 구조는 무엇입니까? (역사적으로) 어디에서 왔습니까?
*args
에서 def foo(*args):
.
, ...args
이름이 나머지 매개 변수 및 확대 ...args
라는 함수 호출 / 배열 / 객체 리터럴로 확산
이 CoffeeScript 튜토리얼보기 : http://jashkenas.github.com/coffee-script/
나는 Splats가 무엇인지 잘 모르겠습니다. 이 구조는 무엇입니까? (역사적으로) 어디에서 왔습니까?
*args
에서 def foo(*args):
.
, ...args
이름이 나머지 매개 변수 및 확대 ...args
라는 함수 호출 / 배열 / 객체 리터럴로 확산
답변:
"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가하는 방식)을 가진 함수에 대해 여러 서명을 허용하지 않기 때문에 스 플랫은 다양한 인수 수를 처리하는 데 엄청난 시간을 절약 해줍니다.
params
키워드 와 유사 합니다.
console.log('this:',variable,'should be replaced with', another_variable);
나는 그것이 자바 스크립트의 인수 객체에 대한 구문 설탕이라고 생각합니다.
아이디어는 루비의 splat 연산자*
에서 나올 수 있습니다 .
(x, rest...) ->
, rest
wont contain x
, arguments
does) 와 결합 할 수 있으므로 조금 더 많습니다 .
arguments
+call
: stackoverflow.com/questions/17380315/...을