迭代+铸造在去
问题描述:
我有此代码段,一个列表迭代+铸造在去
for x:= range s.faces.Iter(){
x.Render()
}
作为编译器的点上使用的迭代器,x是类型接口{}的和不存在的方法(ⅰ接口)Render()在我的代码中定义。
改变到
for x:= range s.faces.Iter(){
x.(faceTri).Render()
}
编译,因为有一个方法FUNC(F faceTri)渲染() 但在执行时该运行时引发错误:
恐慌:接口转换:接口是* geometry.faceTri,不geometry.faceTri
(几何是封装)
因此,任何人都可以指向我一个resou解释使用迭代器+投射的方法吗?
答
这实际上被称为类型断言中去,而不是一个强制转换(强制转换是在某种兼容类型,即int - > int32之间的编译时转换)。
根据您发布的错误,您的代码中只有一个小小的错误。基础类型的x
是*faceTri
(一个指向faceTri结构),这样类型的断言应该x.(*faceTri)
编辑:
有几件事情澄清并超越你的问题。在走式断言不打石膏,例如:interface_with_underlying_type_int.(int64)
会产生恐慌,即使int
可以转换为int64
此外,您还可以使用逗号OK成语
not_interface, ok := some_interface.(some_type)
ok
是一个布尔值,指示转换是否成功,而不是导致运行时恐慌。
它的工作,问题是事实上,我断言错误的类型。 – andijcr 2010-07-16 17:52:55