首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串切片try索引方法抽象为所有切片类型

将字符串切片try索引方法抽象为所有切片类型
EN

Stack Overflow用户
提问于 2013-12-28 00:30:24
回答 1查看 123关注 0票数 1

对于字符串片段,我有这个函数:

代码语言:javascript
复制
func tryIndex(arr []string, index int, def string) string {
    if index <= len(arr)-1 {
        return arr[index]
    }
    return def
}

我想把它抽象成一个用于切片的类型方法。

代码语言:javascript
复制
func (i []interface) TryIndex(index int, def interface) interface {
    if (index <= len(i)-1) {
        return i[index]
    }
    return def
}

然而,这给了我两个错误:

代码语言:javascript
复制
prog.go:9: syntax error: unexpected ), expecting {
prog.go:13: non-declaration statement outside function body

其中,第9行是资金申报行,第13行是"return default“行。

这是怎么回事,我怎么才能修复它?谢谢!

编辑:我最初问题的一个问题是,显然默认是不允许的。我把它改成了"def“

编辑:使用@WesFreeman的建议并解决了一些问题...现在我得到了这个:

代码语言:javascript
复制
prog.go:16: invalid receiver type []interface {} ([]interface {} is an unnamed type)
prog.go:27: aArr.TryIndex undefined (type []string has no field or method TryIndex)
prog.go:28: bArr.TryIndex undefined (type []string has no field or method TryIndex)

其中调用方函数大致如下所示:

代码语言:javascript
复制
aArr := []string{"al", "ba", "ca"} // Arbitrary variable
bArr := []string{"tl", "cl", "rl"} // same
for i := range aArr {
    aR := aArr.TryIndex(i, "00")
    bR := bArr.TryIndex(i, "00")
}

最终编辑:

对于我刚开始的字符串来说,这完全没问题。我的问题主要围绕着是否有可能将其抽象为所有切片类型。如果不是,这也是一个完全有效的答案!

EN

回答 1

Stack Overflow用户

发布于 2013-12-28 01:24:50

直接的问题是空接口是interface{},而不仅仅是interface。所以它期望的是没有花括号的。

如果您希望接受所有类型的切片,则需要将i声明为interface{},而不是[]interface{},因为[]string不能被分配给[]interface{},但是任何东西都可以被分配给interface{}。然后,您将需要使用反射包来访问这些元素。

不过,您的泛型函数的用途有限,因为它的返回值需要对切片的元素类型进行类型断言。TryIndex基本上是语法糖,但是类型断言会让它变得不那么甜蜜。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20804142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档