program tip

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

radiobox 2020. 7. 25. 10:46
반응형

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


이 CoffeeScript 자습서를 보면 : http://jashkenas.github.com/coffee-script/

Splats가 무엇인지 잘 모르겠습니다. 이 건축은 무엇입니까? (역사적으로) 어디서 왔습니까?


"splat operator"라는 용어는 Ruby에서 왔으며, *문자 ( "splat"이라고도 함- 전문 용어 항목 참조 )는 인수 목록의 항목이 인수 목록을 "잠그어야"함을 나타내는 데 사용됩니다.

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

그들이 실제로하는 일에 대해, splats arguments는 splatted 인수가 모든 "extra"인수의 배열이되도록 오브젝트를 슬라이스합니다 . 가장 사소한 예는

(args...) ->

이 경우 args단순히의 배열 사본이 arguments됩니다. 스 플래트 인수는 표준 인수 전, 후 또는 사이에 올 수 있습니다.

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

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

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


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

예를 들면 다음과 같습니다.

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

어설 션에서도 작동합니다.

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

스 플랫은 ...var-args (가변 인수를 취하는 함수)에 연산자를 사용하는 용어입니다 .


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

아이디어는 ruby의 splat operator* 형태 일 수 있습니다 .

참고 URL : https://stackoverflow.com/questions/6201657/what-does-splats-mean-in-the-coffeescript-tutorial

반응형