복붙노트

[SCALA] 스칼라 메소드 호출에서 괄호에 대한 규칙은 무엇인가?

SCALA

스칼라 메소드 호출에서 괄호에 대한 규칙은 무엇인가?

목록으로 뭔가를 변환하는 방법을 toList 아닌가요?

그래 왜 나는 그것으로 괄호를 사용할 수없는 경우? 여기보다 근본적인 뭔가 빠진해야합니다.

다음은 예입니다 :

val l = Array(1,2,3).toList // works fine

val l = Array(1,2,3).toList() // gives the error below

해결법

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

    1.방법은 다음과 같이 정의하면

    방법은 다음과 같이 정의하면

    def toList = { /* something */ }
    

    다음과 같이 호출해야합니다

    object.toList
    

    별도의 괄호. 우리는이 방법은 제로 매개 변수 목록을 가지고 있다고 말한다.

    우리는 또한 매개 변수 목록을 정의하지만, 그 안에 아무것도 넣지 수 :

    def toList() = { /* something */ }
    

    이제, 우리는 중 하나를 호출 할 수 있습니다

    object.toList()
    object.toList
    

    스칼라는 메서드 호출에 괄호를 생략의 바로 가기를 수 있기 때문에.

    아득히 JVM에 관한 한, 제 정의 ( "제로 파라미터리스트") 및 두 번째 ( "하나 개의 빈 파라미터리스트") 사이의 차이가 없다. 그러나 스칼라는 구별을 유지한다. 이것이 좋은 생각인지 아닌지는 논쟁의 여지가있다, 그러나 당신이 실현 될 때 동기는 명확 수 있습니다 우리는 또한 수

    def toList()() = { /* something */ }
    

    두 개의 빈 매개 변수 목록으로 알려진 다음 중 하나를 호출하는

    object.toList()()
    object.toList()
    object.toList
    

    우리는 함수에이 변환한다면 지금, 우리는로 입력합니다

    () => () => T   /* T is the return value of the something */
    

    두 번째 정의는 것 동안

    () => T
    

    이는 실질적으로 당신이 그것을 같은 방식으로 (A T를 얻을 나중에 아무것도에 넣고 조만간)를 사용하는 경우에도 개념적으로 명확하게 다르다.

    어쨌든, toList는 매개 변수를 필요로하지 않으며, 스칼라 표준 방법은 (오히려 단지 반환 뭔가 이상) 개체 자체를 변경하지 않는 한 괄호를 떠나, 그래서 나중에 어떤 괄호없이 데프 toList입니다. 그리고 이렇게 만 object.toList로 호출 할 수 있습니다.

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

    2.두 번째 라인은 사실로 해석됩니다

    두 번째 라인은 사실로 해석됩니다

    val l = Array(1,2,3).toList.apply()
    

    foo는 (X)는 foo.apply (x)에 대한 "마법"구문이기 때문이다.

    컴파일러가 "충분하지 않은 인수"에 대해 불평하는 이유 목록에 적용 할 방법은 하나 개의 인수를 걸립니다 즉,이다.

    따라서 당신은 예컨대 쓸 수 있습니다 :

    scala> val i = Array(1, 2, 3).toList(1)
    i: Int = 2
    
  3. ==============================

    3.나 스타일의 관점 코딩 스칼라에서 답할 수 있도록.

    나 스타일의 관점 코딩 스칼라에서 답할 수 있도록.

    스칼라 스타일 가이드는 말한다 ...

    단지 해당 방법 (순수 관능)에는 부작용이없는 경우에 사용되는 빈 괄호 생략. 즉, queue.size 호출 할 때 괄호를 생략하는 것이 허용 될 수 있지만,에 println를 호출하지 않을 때 ().

    종교적이 규칙을 관찰하는 것은 크게 코드의 가독성을 향상하고 훨씬 쉽게 한 눈에 주어진 방법의 가장 기본적인 동작을 이해할 수 있도록한다. 두 개의 문자를 저장하기 위해 단순히 괄호를 생략 할 수있는 충동을 저항!

  4. from https://stackoverflow.com/questions/6643030/what-is-the-rule-for-parenthesis-in-scala-method-invocation by cc-by-sa and MIT license