我正在做一个简单的控制台游戏来学习围棋,却被一个看似简单的问题卡住了,这个问题在其他语言中不会有问题,但在围棋中似乎几乎不可能。
我有一个接口Map,作为结构体中的一个字段,如下所示:
type Room struct {
// ...
Components map[string]interface{}
// ...
}
我需要遍历map,并对存储在map中的每个元素调用Render()
方法(假设它们都实现了Render()
方法,例如在JS或PHP中,这没有问题,但在Go语言中,我已经把头撞到墙上一整天了。
我需要这样的东西:
for _, v := range currentRoom.Components {
v.Render()
}
这不起作用,但当我指定类型并手动单独调用每一项时,它起作用了:
currentRoom.Components["menu"].(*List.List).Render()
currentRoom.Components["header"].(*Header.Header).Render()
我怎样才能对map中的每一个项目调用Render()
方法呢?或者如果有更好的/不同的方法,请告诉我,因为我已经到了山穷水尽的地步。
1条答案
按热度按时间tp5buhyn1#
定义接口:
然后,只要map的元素实现了该方法,就可以键入assert元素并调用Render:
若要测试某个对象是否可渲染,请用途: