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
다음 myInt
은 f
및에 전달 된 인수 값에 바인딩됩니다 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
'Nice programing' 카테고리의 다른 글
Google Maps V2를 사용하여 단일 마커를 제거하는 방법은 무엇입니까? (0) | 2020.10.08 |
---|---|
List Comprehension Python에서 두 개의 for 루프를 프레임하는 방법 (0) | 2020.10.08 |
Android, 장치를 회전 할 때 활동을 파괴하지 않는 방법은 무엇입니까? (0) | 2020.10.08 |
PATH, rails 및 gem의 경우 모드 040777에서“Insecure world writable dir / home / chance”경고 받기 (0) | 2020.10.08 |
파이썬 세트에서 '+'를 이해하지 못하는 이유는 무엇입니까? (0) | 2020.10.08 |