迭代+铸造在去

问题描述:

我有此代码段,一个列表迭代+铸造在去

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是一个布尔值,指示转换是否成功,而不是导致运行时恐慌。

+0

它的工作,问题是事实上,我断言错误的类型。 – andijcr 2010-07-16 17:52:55