복붙노트

[SCALA] 사람이 기호가 "=>"스칼라에서 어떻게 사용되는지 설명 할 수

SCALA

사람이 기호가 "=>"스칼라에서 어떻게 사용되는지 설명 할 수

나는 심볼의 메이크업의 사용 =>,하지만 난 정말 이해할 수 없었으므로 스칼라 코드 조각을 많이 읽었습니다. 나는 인터넷에서 검색을 시도했지만, 종합 아무것도 찾을 수 없습니다. 심볼이 얼마나 / 사용할 수에 대한 모든 포인터 / 설명이 정말 도움이 될 것입니다.

(운영자가 기능 리터럴에 그림으로 제공하는 방법을보다 구체적으로는, 나는 또한 알고 싶다)

해결법

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

    1.추가 값 / 이름 => 함수를 정의하는 데 사용되는 다른 구문 함수 리터럴을 정의하는 데 사용되는보다 통과.

    추가 값 / 이름 => 함수를 정의하는 데 사용되는 다른 구문 함수 리터럴을 정의하는 데 사용되는보다 통과.

    예 시간. 의 당신이 다른 함수에서받는 함수가 있다고 가정 해 봅시다. 컬렉션은 그들로 가득하지만, 우리는 필터를 선택할 수 있습니다. 필터 (목록 등) 모음에 사용하는 경우, 당신은 false를 반환하기 위해 제공하는 기능을 일으키는 모든 요소를 ​​취할 것입니다.

    val people = List("Bill Nye", "Mister Rogers", "Mohandas Karamchand Gandhi", "Jesus", "Superman", "The newspaper guy")
    // Let's only grab people who have short names (less than 10 characters)
    val shortNamedPeople = people.filter(<a function>)
    

    (아마도, 부울 : 문자열) 데프 isShortName (이름),하지만 그것은 바로 거기 단지 장소에 더 좋은 것 우리는 다른 곳에서 실제 기능에 전달할 수 있습니다. 아아, 우리는 함수 리터럴, 할 수있다.

    val shortNamedPeople = people.filter( name => name.length < 10 )
    

    여기서 우리가 한 일은, 반환 부울 ​​(사람들이 타입 목록 [문자열]이기 때문에) 문자열로받는 함수를 만드는 것입니다. 예쁜 오른쪽 냉각?

    이 구문은 많은 상황에서 사용된다. 하자 당신이 다른 함수에 걸리는 함수를 작성하고 싶은 말은. 이 다른 함수는 문자열에 가지고 가고, int를 반환해야합니다.

    def myFunction(f: String => Int): Int = {
      val myString = "Hello!"
      f(myString)
    }
    // And let's use it. First way:
    def anotherFunction(a: String): Int = {
      a.length
    }
    myFunction(anotherFunction)
    // Second way:
    myFunction((a: String) => a.length)
    

    리터럴을 작동 무엇의가 있음. 이름 별과 별 값으로 다시가는, 당신이 원하는 때까지 평가할 수 없습니다에 당신이 매개 변수를 강제 할 수있는 트릭이있다. 고전적인 예 :

    def logger(message: String) = {
      if(loggingActivated) println(message)
    }
    

    이 모습은 좋아하지만, 로거가 호출 될 때 메시지는 실제로 평가된다. 어떤 메시지가 잠시 걸리는 경우를 평가하기 위해? 예를 들어, 로거 (veryLongProcess ()), veryLongProcess ()는 문자열을 반환하는 경우. 으악? 정말. 우리는 실제로 필요할 때까지 호출 할 수 없습니다) veryLongProcess를 (강제로 기능 리터럴에 대한 우리의 지식을 사용할 수 있습니다.

    def logger(message: => String) = {
      if(loggingActivated) println(message)
    }
    logger(veryLongProcess()) // Fixed!
    

    이제 로거 (좌측> 따라서 육안 =) 매개 변수를 사용하지 않는 기능을 도입한다. 이 (println 메소드에서) 사용되는 경우 당신은 여전히 ​​이전처럼 사용할 수 있습니다,하지만 지금은, 메시지는 평가된다.

  2. from https://stackoverflow.com/questions/12529582/can-anyone-explain-how-the-symbol-is-used-in-scala by cc-by-sa and MIT license