Go는 람다 식 또는 비슷한 것을 지원합니까?Go에는 람다 식 또는 비슷한 것이 있습니까?
람다 식 (Ruby)을 사용하는 다른 언어에서 라이브러리를 이식하려고합니다. 복사 조심스럽게 붙여
Go는 람다 식 또는 비슷한 것을 지원합니까?Go에는 람다 식 또는 비슷한 것이 있습니까?
람다 식 (Ruby)을 사용하는 다른 언어에서 라이브러리를 이식하려고합니다. 복사 조심스럽게 붙여
package main
import fmt "fmt"
type Stringy func() string
func foo() string{
return "Stringy function"
}
func takesAFunction(foo Stringy){
fmt.Printf("takesAFunction: %v\n", foo())
}
func returnsAFunction()Stringy{
return func()string{
fmt.Printf("Inner stringy function\n");
return "bar" // have to return a string to be stringy
}
}
func main(){
takesAFunction(foo);
var f Stringy = returnsAFunction();
f();
var baz Stringy = func()string{
return "anonymous stringy\n"
};
fmt.Printf(baz());
}
람다 표현식은 함수 리터럴이라고합니다. Go는 그들을 완전히 지원합니다. 예제와 함께 http://golang.org/ref/spec#Function_literals
코드 - 도보를 참조하고, 설명 : http://golang.org/doc/codewalk/functions/
예 컴퓨터 프로그래밍에서
,
언어 사양을 참조하십시오 익명 함수 또는 람다 추상화 (func 문자 리터럴)은 식별자에 바인딩되지 않은 함수 정의이고 Go는 익명 함수을 지원하며 클로저를 형성 할 수 있습니다. 익명 함수는 이름을 지정하지 않고 함수를 인라인으로 정의하고자 할 때 유용합니다.package main
import "fmt"
func intSeq() func() int {
i := 0
return func() int {
i += 1
return i
}
}
func main() {
nextInt := intSeq()
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
newInts := intSeq()
fmt.Println(newInts())
}
function intSeq 함수는 intSeq 본문에서 익명으로 정의하는 다른 함수를 반환합니다. 반환 된 함수는 변수 i를 닫음으로써 닫음을 형성합니다.
Output
$ go run closures.go
1
2
3
1
왜 그런 말을 했습니까? 주의 깊게 복사하여 붙여 넣었습니까? :) – loyalflow
내가 코드를 복사했기 때문에 그것을 명확하게하고 싶었습니다. – perreal
나는 복사 된 코드보다 질문에 더 많이보고 싶습니다. 가장 먼저, "예"/ "아니오"/ "부분적으로"등을 추가 할 수 있습니다. 그런 다음 약간의 설명, 코드가 실제로하는 일. – Kissaki