为了账号安全,请及时绑定邮箱和手机立即绑定

Golang - 如何将数组( [ ] )“转换”为列表( ... )?

Golang - 如何将数组( [ ] )“转换”为列表( ... )?

Go
鸿蒙传说 2021-09-21 16:22:30
我正在使用 UI lib ( https://github.com/andlabs/ui ) 来制作一个关于学生团体的程序。ui.SimpleGrid 允许输入控件的“列表”:func NewSimpleGrid(nPerRow int, controls ...Control) SimpleGrid我觉得在 Java 和其他语言中,它就像一个数组一样工作,这基本上意味着给它一个会起作用。然而,这在 Go 中似乎不一样。func initStudentsGrid(students ...Student) ui.SimpleGrid {var i intvar grd_studentsList []ui.Gridfor i = 0; i < len(students); i++ {    grd_student := ui.NewGrid()    grd_student.Add(ui.NewLabel(students[i].group), nil, ui.West, true, ui.LeftTop, true, ui.LeftTop, 1, 1)    grd_student.Add(ui.NewLabel(students[i].lastName), nil, ui.West, true, ui.LeftTop, true, ui.LeftTop, 1, 1)    grd_student.Add(ui.NewLabel(students[i].firstName), nil, ui.West, true, ui.LeftTop, true, ui.LeftTop, 1, 1)    grd_studentsList = append(grd_studentsList, grd_student)}return ui.NewSimpleGrid(1, grd_studentsList)该程序未编译,因为:不能在 ui.NewSimpleGrid 的参数中使用 grd_studentsList(类型 []ui.Grid)作为类型 ui.Control:[]ui.Grid 没有实现 ui.Control(缺少 ui.containerHide 方法)有什么方法可以将数组从数组“转换”为所需的格式,因为不可能一个一个地添加网格(SimpleGrid 上没有 append 方法)?
查看完整描述

2 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

尝试类似:

return ui.NewSimpleGrid(1, grd_studentsList...)
                              ^^^^

这在规范Passing arguments to ... parameters 中提到。


查看完整回答
反对 回复 2021-09-21
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

它也不起作用......


cannot use grd_studentsList (type `[]ui.Grid`) as type `[]ui.Control`

in argument to `ui.NewSimpleGrid`

正如我前面提到的(“关于内存布局意味着什么[]T不能转换到[]interface{}进去吗? ”),你不能隐式转换A[]中[]B。


您需要先复制:


var controls []ui.Control = make([]ui.Control, len(grd_studentsList))

for i, gs := range grd_studentsList{

    controls [i] = gs

}

然后使用正确的切片(使用正确的类型)


 return ui.NewSimpleGrid(1, controls...)


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 734 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信