【发布时间】:2011-10-02 11:39:46
【问题描述】:
如果您查看http://golang.org/src/pkg/image/image.go 此处的图像包,您会发现每个图像的 Opaque() 实现都做同样的事情,只是像素特定的逻辑不同。
这是有原因的吗?任何通用解决方案的效率都会降低吗?这只是一个疏忽吗?类型系统是否有一些限制(我看不到)会使多态 [was: generic] 方法变得困难?
[edit] 我想的那种解决方案(它不需要 Java 意义上的泛型)是这样的:
type ColorPredicate func(c image.Color) bool;
func AllPixels (p *image.Image, q ColorPredicate) bool {
var r = p.Bounds()
if r.Empty() {
return true
}
for y := r.Min.Y; y < r.Max.Y; y++ {
for x := r.Min.X; x < r.Max.X; x++ {
if ! q(p.At(x,y)) {
return false
}
}
}
return true
}
但我在编译时遇到了麻烦(对于 Go 来说仍然很新 - 它会使用图像编译,但不会使用图像指针!)。
这太难优化了吗? (您需要进行函数内联,但是不会将任何类型检查拉出循环吗?)。另外,我现在意识到我之前不应该使用“通用”这个词——我的意思只是通用(ha)的方式。
【问题讨论】:
标签: coding-style types go standard-library