Nice programing

Scala에서 => 및 () => 의미

nicepro 2020. 10. 8. 18:59
반응형

Scala에서 => 및 () => 의미


이 질문에 이미 답변이 있습니다.

저는 Scala를 처음 접했고 정말 마음에 들지만 때로는 놀라움을 느낍니다. 예를 들면 :

clickedCallbacks: List[() => Unit])

사람이 무엇을 말해 줄 수 =>() =>스칼라의 의미?


=>함수의 인스턴스를 만드는 구문 설탕입니다. 스칼라의 모든 함수는 클래스의 인스턴스임을 상기하십시오.

예를 들어, 유형 Int => String, 유형에 해당 Function1[Int,String]유형의 인수를 취하는 함수, 즉 Int과를 반환합니다 String.

  scala> val f: Function1[Int,String] = myInt => "my int: "+myInt.toString
  f: (Int) => String = <function1>

  scala> f(0)
  res0: String = my int: 0

  scala> val f2: Int => String = myInt => "my int v2: "+myInt.toString
  f2: (Int) => String = <function1>

  scala> f2(1)
  res1: String = my int v2: 1

다음 myIntf및에 전달 된 인수 값에 바인딩됩니다 f2.

() => T인수를 취하지 않고를 반환하는 함수 유형입니다 T. 이는 Function0[T]. ()내가 믿는 제로 매개 변수 목록이라고합니다.

 scala> val f: () => Unit = () => { println("x")}
 f: () => Unit = <function0>

 scala> f()
 x

scala> val f2: Function0[Unit] = () => println("x2")
f: () => Unit = <function0>

scala> f2()
x2

=> 스칼라에는 수학적 의미와 관련된 몇 가지 의미가 있습니다.

  • 값에서 함수 리터럴 또는 lambda를 도입합니다 . 예 : 중괄호 안의 비트List(1,2,3).map { (x: Int) => x * 2 }

  • 형태에서, 화살표의 양측 (예에 기호 A => T, (A,B) => T, (A,B,C) => T에 대한 그것의 설탕 등) Function<n>[A[,B,...],T]이며, 입력의 파라미터를 취하는 함수 A[,B...], 복귀 형태의 값 T.

    • 왼쪽의 빈 괄호 (예 :) () => T는 함수가 매개 변수 ( "thunk"라고도 함)를받지 않음을 나타냅니다.

    • 오른쪽의 빈 괄호는 이것이 반환된다는 것을 나타냅니다.- ()type의 유일한 값 Unit, 그 이름도 쓸 수 있습니다- ()아직 혼란 스럽습니까? :)

      Unit을 반환하는 함수는 일반적으로 부작용에 대해서만 호출되는 메서드 인 프로 시저 라고도 합니다.

  • 메소드 또는 함수 매개 변수에 대한 유형 선언에서 왼쪽에 기호가없는 (예 :) def f(param: => T)"이름 별 매개 변수"입니다. 이는 이전이 아닌 함수 본문 내에서 사용될 때마다 평가됨을 의미합니다. 함수 / 메소드에 들어가기 전에 일반적인 "값별"매개 변수가 평가됩니다.

  • A의 case절, 그들은 예를 들어, 결과 표현의 패턴 (및 옵션 가드)를 분리 case x => y.


() => Unit의미 : "매개 변수를 사용하지 않고 아무것도 반환하지 않는 유형 함수"

따라서 f매개 변수를받지 않고 아무것도 반환하지 않는 함수 로 값 선언하면 유형은 다음과 같습니다.

val f : () => Unit

이것은 val값을 할당해야합니다. 예를 들어Hola mundo

val f : () => Unit  = () => println("Hola Mundo")

* "f는 매개 변수를받지 않고 코드로 초기화 된 값을 반환하지 않는 함수입니다. println("Hola Mundo")

Scala에서는 유형 추론을 사용할 수 있으므로 유형을 선언 할 필요가 없으므로 다음이 동일합니다.

val f = () => println("Hola Mundo")

호출하려면 다음을 수행하십시오.

f()

>"Hola mundo"

또는 함수도 객체이기 때문에 apply메소드를 호출 할 수 있습니다 .

f.apply()
> "Hola Mundo"

That's why in your declaration you're saying "I'll have a list that will hold functions with no params and no return types" hence List[()=>Unit]

I hope this helps.


As the most simplified answer, you can substitute whatever is on the left-hand side of => with the word "LEFT" and whatever is on the right-hand side with the word "RIGHT".

Then, the meaning of "LEFT => RIGHT" becomes:

Take LEFT then do RIGHT.

This means that if you have a "()=>" that you can take nothing (that is, no parameters) and then do whatever is on the right-hand side.

This is the most common meaning.


=> is the "function arrow". It is used both in function type signatures as well as anonymous function terms. () => Unit is a shorthand for Function0[Unit], which is the type of functions which take no arguments and return nothing useful (like void in other languages).

참고URL : https://stackoverflow.com/questions/6951895/what-does-and-mean-in-scala

반응형