3 回答
TA贡献1852条经验 获得超7个赞
允许这样做会导致模棱两可的行为;但您可以关闭最后一个参数并返回部分应用的函数:
func checkError(m string) func(*os.File, error) {
return func(f *os.File, e error) {
if e != nil {
// do stuff with m
}
}
checkError("Can't Open File")(os.Open(path))
或者,反过来:
func checkError(f *os.File, e error) func(string) {
return func(m string) {
if e != nil {
// do stuff with m
}
}
checkError(os.Open(path))("Can't Open File")
TA贡献1804条经验 获得超8个赞
我发现它有点不一致,因为以下工作正常,但是当添加额外的位置参数时,编译器不喜欢它。
func checkError(f *os.File, e error) interface{} {
if e != nil {
/*Print m and panic*/
}
return f
}
func f1(path string) {
checkError(os.Open(path)) //ERROR
}
显然你可以直接推送返回值,不确定你会损失多少,因为如果错误不是零,你会惊慌失措
func checkError(f *os.File, e error, m string) interface{} {
if e != nil {
/*Print m and panic*/
}
return f
}
func f1(path string) {
file, e := os.Open(path)
checkError(file, e, "Can't Open File")
}
另一个想法是你可以传递函数并完成工作checkError
type OsFunction func(string)(* os.File, error)
func checkError(osFunction OsFunction, path string, m string) interface{} {
f, e := osFunction(path)
if e != nil {
/*Print m and panic*/
}
return f
}
func f2(path string) {
checkError2(os.Open, path, "Can't Open File")
}
TA贡献1803条经验 获得超6个赞
我记得函数也可以返回。以下解决方案对我有用
func checkError(r interface{}, e error) func(string) interface{} {
return func(m string) interface{} {
if e != nil {
/*Print m and panic*/
}
return r
}
}
func f1(path string) {
checkError(os.Open(path))("Can't open file")
}
- 3 回答
- 0 关注
- 173 浏览
添加回答
举报