아무도 언급하지 않았기 때문에 잘못되었을 수도 있지만, 그 이유는 대괄호없이 함수를 호출 할 수있는 루비 유산이기도하다는 인상을 받았습니다.
Arity는 분명히 관련되어 있지만 잠시 동안 제쳐두고 인수없이 함수를 사용할 수 있습니다. 대괄호가 필수 인 자바 스크립트와 같은 언어에서는 함수를 인수로 전달하는 것과 함수를 호출하는 것 사이를 쉽게 구분할 수 있습니다. 대괄호를 사용할 때만 호출합니다.
my_function // argument
(function() {}) // argument
my_function() // function is called
(function() {})() // function is called
보시다시피, 이름을 지정하거나 지정하지 않아도 큰 차이는 없습니다. 그러나 엘릭서와 루비는 대괄호없이 함수를 호출 할 수 있습니다. 이것은 개인적으로 좋아하는 디자인 선택이지만이 부작용이 있으므로 대괄호없이 이름을 사용할 수 없으므로 함수를 호출 할 수 있기 때문입니다. 이것이 바로 이것입니다 &
. arity appart를 1 초 동안 남겨두면 함수 이름 앞에 접두어가 있으면 &
이 함수가 반환하는 것이 아니라이 함수를 인수로 명시 적으로 사용하려는 것입니다.
이제 익명 함수는 주로 인수로 사용된다는 점에서 약간 다릅니다. 다시 이것은 디자인 선택이지만 그 뒤에 합리적인 이유는 반복자로 함수를 인수로 취하는 일종의 함수에 의해 주로 사용된다는 것입니다. 따라서 &
기본적으로 이미 인수로 간주되기 때문에 사용할 필요가 없습니다 . 그들의 목적입니다.
이제 마지막 문제는 코드에서 호출해야 할 때가 있습니다. 반복자 유형의 함수와 함께 항상 사용되는 것은 아니거나 반복자를 직접 코딩 할 수 있기 때문입니다. 작은 이야기의 경우, 루비는 객체 지향이기 때문에 객체의 call
메소드 를 사용하는 것이 주된 방법 입니다. 이렇게하면 필수 대괄호 동작을 일관되게 유지할 수 있습니다.
my_lambda.call
my_lambda.call()
my_lambda_with_arguments.call :h2g2, 42
my_lambda_with_arguments.call(:h2g2, 42)
이제 누군가 기본적으로 이름이없는 방법처럼 보이는 바로 가기를 만들었습니다.
my_lambda.()
my_lambda_with_arguments.(:h2g2, 42)
다시, 이것은 디자인 선택입니다. 이제 엘릭서는 객체 지향적이 아니므로 첫 번째 양식을 사용하지 마십시오. José를 말할 수는 없지만 두 번째 양식은 엘릭서에서 사용 된 것처럼 보입니다. 여전히 추가 문자가있는 함수 호출처럼 보입니다. 함수 호출에 충분히 가깝습니다.
나는 모든 장단점을 생각하지는 않았지만 익명 기능을 위해 대괄호를 필수로 만들면 두 언어 모두 대괄호로 벗어날 수있는 것처럼 보입니다. 다음과 같습니다.
필수 대괄호 VS 약간 다른 표기법
두 경우 모두 다르게 행동하기 때문에 예외가 발생합니다. 차이가 있기 때문에 명확하게하고 다른 표기법으로 갈 수 있습니다. 필수 대괄호는 대부분 자연스럽게 보이지만 계획대로 진행되지 않으면 매우 혼란 스러울 수 있습니다.
여기 요 이제는 대부분의 세부 사항을 단순화했기 때문에 이것이 세계에서 가장 잘 설명되지 않을 수 있습니다. 또한 대부분은 디자인 선택이며 심사하지 않고 이유를 제시하려고했습니다. 나는 엘릭서를 사랑하고, 루비를 좋아하고, 대괄호없이 함수 호출을 좋아하지만, 당신처럼, 결과는 때때로 잘못 오해하고 있습니다.
그리고 엘릭시르에서는이 여분의 점에 불과하지만 루비에서는 그 위에 블록이 있습니다. 블록은 놀랍고 블록으로 얼마나 많은 일을 할 수 있는지에 놀랐지 만 마지막 인수 인 익명 함수가 하나만 필요할 때만 작동합니다. 그런 다음 다른 시나리오를 처리 할 수 있으므로 전체 방법 / 람다 / 절차 / 블록 혼란이 있습니다.
어쨌든 ...이 범위를 벗어났습니다.