英文:
Golang multiple-value function composition
问题
我明白了,以下是翻译的内容:
在我在SO上没有找到答案的一个简短问题:当内部函数有多个返回值时,如何编写复合函数调用?
子问题:是否可以仅对多值函数的一个返回值进行类型转换,而不使用临时变量?
示例:http://play.golang.org/p/intnxkzSO1
package main
import "fmt"
func multiReturn() (int, int) {
return 0, 1
}
func noOp(a int) int {
return a
}
func main() {
// 参数过多
fmt.Print(noOp(multiReturn()))
// 多值在单值上下文中
fmt.Print(string(multiReturn()))
}
英文:
Short question to which I haven't found an answer on SO: how do I write composite function calls when an inner function has multiple return values?
Sub-question: can you cast just one of the returns from a multiple-value function without using a temp variable?
Example: http://play.golang.org/p/intnxkzSO1
package main
import "fmt"
func multiReturn() (int, int) {
return 0, 1
}
func noOp(a int) int {
return a
}
func main() {
// Too many arguments
fmt.Print(noOp(multiReturn()))
// multiple-value in single-value context
fmt.Print(string(multiReturn()))
}
答案1
得分: 2
你可以使外部函数的返回值与内部函数的返回值匹配。
func multiReturn() (int, int) {
return 10, 1
}
func noOp(a, _ int) int {
return a
}
func main() {
fmt.Printf("%v\n", noOp(multiReturn())) // 输出: 10
fmt.Printf("%s", strconv.Itoa(noOp(multiReturn()))) // 输出: 10
}
另外,需要注意的是,string(int)
不起作用,你需要使用 strconv
包。
在这里可以尝试运行代码:play
另一种选择是使用可变参数。
func noOp(a ...int) int {
if len(a) > 0 {
return a[0]
}
return 0
}
英文:
You can have your outer function match the return values of the inner function
func multiReturn() (int, int) {
return 10, 1
}
func noOp(a, _ int) int {
return a
}
func main() {
fmt.Printf("%v\n", noOp(multiReturn())) // output: 10
fmt.Printf("%s", strconv.Itoa(noOp(multiReturn()))) // output: 10
}
On a side note string(int) will not work, you have to use the strconv
package.
Go play
Another option would to use a variadic parameter.
func noOp(a ...int) int {
if len(a) > 0 {
return a[0]
}
return 0
}
答案2
得分: 0
例如,
package main
import "fmt"
func singleReturn() int {
s, _ := multiReturn()
return s
}
func multiReturn() (int, int) {
return 0, 1
}
func noOp(a int) int {
return a
}
func main() {
fmt.Print(noOp(singleReturn()))
fmt.Print(string(singleReturn()))
// 参数过多
//fmt.Print(noOp(multiReturn()))
// 多值在单值上下文中
//fmt.Print(string(multiReturn()))
}
英文:
For example,
package main
import "fmt"
func singleReturn() int {
s, _ := multiReturn()
return s
}
func multiReturn() (int, int) {
return 0, 1
}
func noOp(a int) int {
return a
}
func main() {
fmt.Print(noOp(singleReturn()))
fmt.Print(string(singleReturn()))
// Too many arguments
//fmt.Print(noOp(multiReturn()))
// multiple-value in single-value context
//fmt.Print(string(multiReturn()))
}
答案3
得分: -3
你也可以返回一个返回多个值的函数。
func f() (int, int) {
return 1, 2
}
func g() (int, int) {
return f()
}
英文:
you can also return a function that returns multiple values.
func f() (int, int) {
return 1, 2
}
func g() (int, int) {
return f()
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论