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()); }
Lambda 표현식은 함수 리터럴이라고도합니다. Go는이를 완벽하게 지원합니다.
언어 사양 참조 : http://golang.org/ref/spec#Function_literals
예제와 설명이 포함 된 코드 워크를 참조하십시오. http://golang.org/doc/codewalk/functions/
예
컴퓨터 프로그래밍에서 익명 함수 또는 람다 추상화 (함수 리터럴)는 식별자에 바인딩되지 않은 함수 정의이며 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())
}
intSeq 함수는 intSeq 본문에 익명으로 정의 된 다른 함수를 반환합니다. 리턴 기능 내가 폐쇄를 형성하는 변수를 통해 폐쇄 .
Output
$ go run closures.go
1
2
3
1
golang은 람다 식을 만드는 것 같지 않지만 문자 그대로 익명 함수를 사용할 수 있습니다. JS에서 동등한 것을 비교 공부할 때 몇 가지 예제를 작성했습니다.
인수 반환 문자열 없음 :
func() string {
return "some String Value"
}
//Js similar: () => 'some String Value'
문자열 인수 및 반환 문자열 사용
func(arg string) string {
return "some String" + arg
}
//Js similar: (arg) => "some String Value" + arg
인수 및 반환 없음 (무효)
func() {
fmt.Println("Some String Value")
}
//Js similar: () => {console.log("Some String Value")}
with Arguments and no returns (void)
func(arg string) {
fmt.Println("Some String " + arg)
}
//Js: (arg) => {console.log("Some String Value" + arg)}
An example that hasn't been provided yet that I was looking for is to assign values directly to variable/s from an anonymous function e.g.
test1, test2 := func() (string, string) {
x := []string{"hello", "world"}
return x[0], x[1]
}()
Note: you require brackets ()
at the end of the function to execute it and return the values otherwise only the function is returned and produces an assignment mismatch: 2 variable but 1 values
error.
Yes, but it is a lambda expression in its fullest form, closures and all. You don't get type inference with function literals however! That's what makes Go sucks!
Yes, since it is a fully functional language, but has no fat arrow (=>) or thin arrow (->) as the usual lambda sign, and uses the func keyword for the sake of clarity and simplicity.
참고URL : https://stackoverflow.com/questions/11766320/does-go-have-lambda-expressions-or-anything-similar
'Programing' 카테고리의 다른 글
PHP에서 특정 유형의 객체를 확인하는 방법 (0) | 2020.11.28 |
---|---|
Rails Asset Pipeline 사전 컴파일 프로세스의 속도를 높이려면 어떻게해야합니까? (0) | 2020.11.28 |
D3 차트의 레이블에 줄 바꿈을 어떻게 포함합니까? (0) | 2020.11.28 |
C 대 C ++ 구조체 정렬 (0) | 2020.11.28 |
dotnet cli와 새로운 vs2017 msbuild 간의 관계 (0) | 2020.11.28 |