저는 Ruby를 처음 접하면서도 언어 디자인 원칙을 이해하려고 노력하고 있습니다. 내가 정상적으로 처리했다면 루비의 람다 식 호출은 대괄호로 묶여 있어야하고, "일반"함수 호출은 "보통"/ 둥근 괄호가 있어야합니다.람다 대 함수 호출 또는 호출 - Ruby의 구문이 다릅니다. 왜?
구문이 다른 특별한 이유가 있습니까? 즉 호출자가 함수를 호출하거나 람다 식을 적용하는지 여부를 알고 있어야합니다 (이유).
저는 Ruby를 처음 접하면서도 언어 디자인 원칙을 이해하려고 노력하고 있습니다. 내가 정상적으로 처리했다면 루비의 람다 식 호출은 대괄호로 묶여 있어야하고, "일반"함수 호출은 "보통"/ 둥근 괄호가 있어야합니다.람다 대 함수 호출 또는 호출 - Ruby의 구문이 다릅니다. 왜?
구문이 다른 특별한 이유가 있습니까? 즉 호출자가 함수를 호출하거나 람다 식을 적용하는지 여부를 알고 있어야합니다 (이유).
Ruby에서 메서드는 lambda가 아니기 때문에 (예 : JavaScript에서와 같이).
메소드는 항상 객체에 속하며 (하위 클래스 또는 혼합으로) 상속 될 수 있으며 객체의 고유 클래스에서 덮어 쓸 수 있으며 블록 (람다)을 제공 할 수 있습니다. 변수에 대한 자체 범위가 있습니다. 예 방법 정의 : 람다가/발동 일반 폐쇄는, 어쩌면 변수에 저장되지 않습니다 그러나
a = :some_variable
def some_method
# do something, but not possible to access local variable a
end
# call with:
some_method
- 아무것도 :
a = :some_variable
some_lambda = lambda{
# do something, access local variable a if you want to
}
# call with:
some_lambda[]
루비가 결합 모두 예를 들어, 강력한 구문 접근을 차단 통과 :
def some_method_with_block(a)
# do something, call given block (which is a lambda) with:
yield(a) ? 42 : 21
end
# example call:
some_method_with_block(1) do |x|
x.odd?
end #=> 42
일반 Ruby 메서드 호출은 블록 용 중괄호가 아닌 ()
을 사용합니다. 람다 호출에 대해 []
이 마음에 들지 않으면 언제든지 call
메서드를 사용할 수 있습니다.
예 : 또한 루비의 최신 버전에서
>> by_two = lambda { |x| x * 2 } #=> #<Proc:[email protected](irb):1>
>> by_two[5] #=> 10
>> by_two.call(5) #=> 10
편집
:
>> by_two.(5) #=> 10
루비는 bareword는을 볼 때 당신은 단지, by_two(5)
을 할 수없는 이유에 먼저 로컬 변수로 해석하고 메소드로 실패한 경우이를 시도합니다.
[1] 내 질문에 수정되었습니다 : '둥근 괄호'대신 '둥근 괄호'. 내 잘못이야. [2]'by_two'가 변수로 먼저 해석된다고 가정하십시오. 그 이유는 단순히 기술 (파서를 조정)한다는 의미입니까? 람다 호출과 함수 호출 또는 어떤 것에 나타날 수있는 정말로 다른 어떤 종류의 것들이 여기 있지 않습니까? 차이점을 어떻게 든 언어 디자인 수준에 반영하지 않습니까? – BreakPhreak
[2]에 대한 J -_-L의 대답을 참조하십시오. –
당신이 브래킷을 원한다면, 당신은 할 수
by_two = lambda { |x| x * 2 }
by_two.(5) # => 10
.
은 by_two
과 (5)
사이입니다.
그게 알아두면 유용합니다. – nterry
고마워요! 네, JavaScript는 내가 염두에 두었던 반대 사례였습니다! 내가 무슨 뜻인지 알지만 블록에 대한 모범을 보일 때 완벽 할 것입니다. 아직 답을 찾지 못했다고 생각합니다 :) – BreakPhreak
의견을 보내 주셔서 감사 드리며 일부 코드 조각을 추가했습니다 :) –
perfect! 고맙습니다 - 더 많은 것을 기대하고 더 많이 기대했습니다 :) – BreakPhreak