복붙노트

[SCALA] 우리가 인수를 필요로하지 않는 함수를 정의 할 괄호를 사용할 수 없습니다 경우 왜 스칼라에 빈 괄호를 사용 하는가?

SCALA

우리가 인수를 필요로하지 않는 함수를 정의 할 괄호를 사용할 수 없습니다 경우 왜 스칼라에 빈 괄호를 사용 하는가?

지금까지 내가 이해, 스칼라에서 우리는 하나의 이름 뒤에 빈 괄호를 사용하여 매개 변수없이 함수를 정의 할 수 있습니다, 또는 전혀 괄호,이 두 정의는 동의어되지 않습니다. 어떤이이 구문을 구별의 목적은 때 더 나은 대신 다른 중 하나를 사용해야합니까?

해결법

  1. ==============================

    1.그것은 주로 규칙의 질문입니다. 빈 매개 변수 목록과 방법, 규칙에 따라, 그 부작용에 대한 평가됩니다. 파라미터없이 방법은 부작용이없는 것으로 간주된다. 즉, 규칙입니다.

    그것은 주로 규칙의 질문입니다. 빈 매개 변수 목록과 방법, 규칙에 따라, 그 부작용에 대한 평가됩니다. 파라미터없이 방법은 부작용이없는 것으로 간주된다. 즉, 규칙입니다.

  2. ==============================

    2.호출되는 방법은 어떤 부작용이없는 경우에만 스칼라 스타일 가이드는 생략 괄호로 말한다 : http://docs.scala-lang.org/style/method-invocation.html

    호출되는 방법은 어떤 부작용이없는 경우에만 스칼라 스타일 가이드는 생략 괄호로 말한다 : http://docs.scala-lang.org/style/method-invocation.html

  3. ==============================

    3.다른 답변은 중대하다, 그러나 나는 또한 그것의 가치가없는 PARAM 방법이 너무 같은 클래스 필드에 좋은 액세스를 허용 언급 할 생각 :

    다른 답변은 중대하다, 그러나 나는 또한 그것의 가치가없는 PARAM 방법이 너무 같은 클래스 필드에 좋은 액세스를 허용 언급 할 생각 :

    person.name
    

    차단 호출 코드를 깨지 않고 '이름'필드에 대한 읽기 (또는 쓰기)에 있기 때문에 매개 변수가없는 방법으로, 당신은 쉽게과 같이, 방법을 쓸 수있다

    def name = { log("Accessing name!"); _name }
    

    이것은 통일 액세스 원리라고합니다

  4. ==============================

    4.나는 함수의 선언 블록 (따라서 나중에 통화에서 그들에게) 부작용 빈 괄호를 장려 협약의 유용성에 가져 오는 또 다른 빛이있다.

    나는 함수의 선언 블록 (따라서 나중에 통화에서 그들에게) 부작용 빈 괄호를 장려 협약의 유용성에 가져 오는 또 다른 빛이있다.

    그것은 디버거이다.

    하나는 같은 말, 같은 디버거에서 시계를 추가하는 경우, 과정은 하나의 변수보기로, 포커스 디버그 맥락에서 부울로, 예를 들어 참조, 또는 순수 부작용 무료 기능 평가, 그것은 불쾌한 위험이 당신 나중에 문제 해결을위한. 실제로, 디버거는 그 시계를 유지하면 내가 IntelliJ를 가진 적어도 경우가 발견 당신이 (..., 호출 스택의 변화 스레드, 이동 다른 중단 점에 도달) 컨텍스트를 변경할 때마다 일을 평가 시도-에-A IDEA, 또는 다른 언어 비주얼 스튜디오는, 다음 가능성이있는 탐색 범위에있는 모든 다른 프로세스 기능의 부작용이 유발 될 것입니다 ...

    바로이 때문에 일부 무고한 일반 이름의, 당신은 단지 염두에 경고가없는 경우가 발생할 수 문제 해결 수수께끼의 종류를 상상한다. 협약이 적용된다면, 내 예제, 프로세스 부울 평가는 디버거 시계에서 프로세스 () 함수 호출에 다시 빠지지 않을 것이다; 그것은 단지 명시 적으로 디버거에서 허용 될 수있는 시계에)합니다 (() 함수 퍼팅 과정에 액세스,하지만 당신이 직접 기타에) (다른 프로세스에 기능을 모든 속성 또는 로컬 변수, 폴백에 접근하지 않는 취소 될 것 어쩌면 불운 경우 탐색 범위, 최소한 매우 적은 놀라운 일이 될 것입니다.

  5. from https://stackoverflow.com/questions/3877953/why-to-use-empty-parentheses-in-scala-if-we-can-just-use-no-parentheses-to-defin by cc-by-sa and MIT license